本文介绍了Rails BEFORE_VALIDATION条带空白最佳实践的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我希望我的用户模型在保存之前清理一些输入。现在,一些简单的空格剥离就可以了。例如,为了避免人们注册"Harry"并冒充"Harry"。
我认为在验证之前执行此剥离是个好主意,以便valiates_Unique_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,})/i
before_validation :strip_whitespace, :only => [:name, :email, :nick]
private
def strip_whitespace(value)
value.responds_to?('strip') ? value.strip : value
end
end
但是,此代码附带错误ArgumentError:错误的参数数量(1对应于0)。我假设会向回调传递这些值。还有:这个剥离真的是个好主意吗?或者我应该在空间上进行验证,并告诉用户"Harry"包含无效的空格(我希望允许"Harry Potter",但不允许"HarryssPotter")。
编辑:正如一条评论中指出的,我的代码是错误的(这就是我问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
的内容使其更具动态性,但这就是要点。
这篇关于Rails BEFORE_VALIDATION条带空白最佳实践的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!