使用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/