gpt4 book ai didi

ruby-on-rails - Rails before_validation 剥离空白最佳实践

转载 作者:行者123 更新时间:2023-12-03 05:50:35 27 4
gpt4 key购买 nike

我希望我的用户模型在保存之前清理一些输入。现在,一些简单的空白剥离就可以了。例如,为了避免人们注册“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:参数数量错误(0 代表 1)。我假设回调将传递值。

另外:这种剥离实际上是个好主意吗?或者我应该验证空间并告诉用户“Harry”包含无效空格(我想允许“Harry Potter”但不允许“Harry\s\sPotter”)。

编辑:正如评论中指出的那样,我的代码是错误的(这就是我问这个问题的原因)。除了我的问题之外,请确保您阅读已接受的答案以获取正确的代码,并避免我犯下同样的错误。

最佳答案

我不相信 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 before_validation 剥离空白最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3268053/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com