ruby-on-rails - Rails state_machine - 条件验证?

标签 ruby-on-rails validation activerecord state

使用state_machine时,如何通过以下方式有条件地验证字段?

state :unlit do      
end

state :fire do
  if is_big_fire?
    validates_presence_of :big_log
  end
  if is_small_fire?
    validates_presence_of :small_log
  end
end

它似乎只是忽略 if 条件并验证状态 D 内的所有内容:

我想出的唯一某种解决方案是

validates_presence_of :big_log, :if  => Proc.new { |fire| fire.is_big_fire? }

但是如果有更多的验证,这就会变得疯狂。

validates_presence_of :big_log, :if  => Proc.new { |fire| fire.is_big_fire? }
validates :fire_epicness_rating, :inclusion => { :in => %w(epic whowa RUNFORTHEHILLS) }, :if  => Proc.new { |fire| fire.is_big_fire? }
etc

有没有一些好的方法可以将它们整齐地包装在 if block 中?

最佳答案

借助 with_options 进行分组验证非常简洁。请参阅here .

关于ruby-on-rails - Rails state_machine - 条件验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7891795/

相关文章:

Css bootstrap 表单(rails 新手)

ruby-on-rails - 触发依赖 : :destroy with overridden destroy-method

c# - IClientValidatable 实现是否违反了 MVC 中的 DRY 原则?

validation - 使用训练阶段使用的完全相同的数据集进行交叉验证是否合适?

HTML5 表单验证的 Javascript 代码不起作用

mysql - ActiveRecord 的行为不符合我的预期

ruby-on-rails - 有没有办法在没有安装像binging.pry这样的gem的环境下设置断点进行debug?

ruby-on-rails - 如何在 rails3 中嵌入用户创建的 ruby​​ 程序

ruby-on-rails - 如何从两个不同的外键访问模型?

ruby-on-rails - 仅查找所有 has_many 集合都具有特定列值的对象