【发布时间】:2011-03-17 03:11:18
【问题描述】:
我希望我的用户模型在保存之前清理一些输入。现在一些简单的空格剥离就可以了。 因此,例如,为了避免人们注册“Harry”并假装“Harry”。
我认为在验证之前执行此剥离是个好主意,这样 validates_uniqueness_of 可以避免意外重复。
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: wrong number of arguments (0 for 1)。我假设回调将传递值。
另外:这种剥离真的是个好主意吗?或者我应该在空间上验证并告诉用户“Harry”包含无效空格(我想允许“Harry Potter”但不允许“Harry\s\sPotter”)。
编辑:正如评论中指出的那样,我的代码是错误的(这就是我问这个问题 a.o. 的原因)。除了我对正确代码的问题之外,请确保您阅读接受的答案,并避免我犯的同样错误。
【问题讨论】:
-
对于其他偶然发现此问题的人 - before_validation 没有
:only选项。并且回调不带参数。请参阅答案了解更多详情。
标签: ruby-on-rails validation model