加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何将相同的多个Rails验证组合在一起:if con

发布时间:2020-12-17 03:58:57 所属栏目:百科 来源:网络整理
导读:我有一个具有许多验证的模型,可以根据不同的条件进行分组.蛮力的处理方式是: validates_presence_of :attr1,:if = :condition1validates_something :attr2,:if = :condition1validates_something_else :attr3,:if = :condition1...validates_presence_of :a
我有一个具有许多验证的模型,可以根据不同的条件进行分组.蛮力的处理方式是:

validates_presence_of :attr1,:if => :condition1
validates_something :attr2,:if => :condition1
validates_something_else :attr3,:if => :condition1
...

validates_presence_of :attr4,:if => :condition2
validates_something :attr5,:if => :condition2
validates_presence_of :attr6,:if => :condition2
...

但这似乎不是很干.有没有一种很好的方法可以根据条件对验证进行分组?我想出的方法是:

class Condition1Validator < ActiveModel::Validator
  def validate(record)
    record.instance_eval do
      validates_presence_of :attr1
      validates_something,:attr2
      validates_something_else :attr3
    end
  end
end
validates_with Condition1Validator,:if => :condition1

class Condition2Validator < ActiveModel::Validator
...
end
validates_with Condition2Validator,:if => :condition2

谁能想到更好的方法?

更新:我在上面发布的方式存在缺陷,因为你不能在嵌套验证器上使用if,除非等.杰西的解决方案要好得多.

解决方法

此方法来自多步骤向导,您只需要验证是否在该向导步骤中.应该也适合你

class YourModel 

  with_options :if => lambda { |o| o.whatever == "whatever" } do |on_condition|
    on_condition.validates_presence_of :address
    on_condition.validates_presence_of :city
  end

  with_options :if => lambda { |o| o.condition_the_second == "whatever" } do |on_condition|
    on_condition.validates_presence_of :foo
    on_condition.validates_presence_of :bar
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读