【问题标题】:rails validation - custom validationsrails 验证 - 自定义验证
【发布时间】:2021-03-11 20:38:41
【问题描述】:

我正在尝试在用户模型上使用与他们注册时相同的验证来验证 4 个字段。我不想用相同的逻辑编写 4 种不同的方法。

我正在验证以下字段 first_namelast_nameuser_namenickname。这是我正在检查的内容

 def validate_input 
   if first_name.present? && first_name.start_with?("=", "@", "-", "+")
    first_name.prepend('`')
   end
 end

我怎样才能使用这种方法而不必用相同的方法重复自己 4 次?

【问题讨论】:

  • guides.rubyonrails.org/… 您可以使用简单的方法(参见 6.2 自定义方法)或编写完整的验证器(6.1)。 6.2可能更容易。也就是说:这不是验证,这是修改,所以我不确定这是否是正确的做法。

标签: ruby-on-rails validation


【解决方案1】:

我认为您没有验证这些字段。相反,您正在修改它们。所以,逻辑应该进入回调。

before_save :sanitize_the_names

def sanitize_the_names
  [:first_name, :last_name, :user_name, :nickname].each do |field|
    self.public_send(field).prepend('`') if field_invalid?
  end
end

def field_invalid?
  self.public_send(field).present? && self.public_send(field).start_with?('=', '@', '-', '+')
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多