我希望我的用户模型在保存之前对一些输入进行清理.现在,一些简单的空格剥离就可以了.

我认为在验证之前进行剥离是一个好主意,这样的validates_university_就可以避免意外的重复.

class User < ActiveRecord::Base
  has_many :open_ids

  validates_presence_of :name
  validates_presence_of :email
  validates_uniqueness_of :name
  validates_uniqueness_of :email
  validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i

  before_validation :strip_whitespace, :only => [:name, :email, :nick]

  private
  def strip_whitespace(value)
    value.responds_to?('strip') ? value.strip : value
  end
end

但是,这段代码有一个错误ArgumentError:参数数量错误(0代表1).我以为回调会传递这些值.

还有:这真的是个好主意吗?或者我应该在空间上验证并告诉用户"哈利"包含无效的空格(我想允许"哈利·波特"而不是"哈利·s·斯波特").

编辑:正如在一篇 comments 中指出的,我的代码是错误的(这就是为什么我问a.o.)这个问题.除了我的问题,请确保你阅读了被接受的答案,以获得正确的代码,并避免我犯的相同错误.

推荐答案

我不相信before_validation是这样的.您可能希望这样编写方法:

def strip_whitespace
  self.name = self.name.strip unless self.name.nil?
  self.email = self.email.strip unless self.email.nil?
  self.nick = self.nick.strip unless self.nick.nil?
end

如果你想使用self.columns之类的东西,你可以让它更有活力,但这就是它的要点.

Ruby-on-rails相关问答推荐

带有rails 7.1的Lightbox2未初始化

GO AES GCM加密在解密时出错&S

获取所有属于模型的嵌套对象

如何使用 Rails 语义记录器记录整个请求(标头、正文等)

使用带有 Paper Trail gem 的子类

如何验证 Rails 中的多态字段关联?

使用 Ruby On Rails 的多个用户模型,并设计有单独的注册路由,但只有一个共同的登录路由

Rails:用于创建固定长度 char(12) 列的迁移

Rails:如何访问 RESTful 助手?

价格字段的字符串、小数或浮点数据类型?

使用 ActiveRecord 3 / Arel 查找单个记录的最佳方法?

使用回形针调整图像大小

使用 RSpec 2 关闭一个规范的事务性固定装置

表单中的第一个参数不能包含 nil 或为空 - Rails 4

在rails国际化yml文件中传递变量

submit_tag rails 表单中的 bootstrap 图标

redirect_to 和 render 是可交换的吗?

Vagrant上的Rails 4.2服务器端口转发不起作用

在创建控制器和模型之后(仅)创建 Ruby on Rails 视图

rails路由中资源和资源之间的区别?