2011-10-25 18 views
2

state_machineを使用している場合、以下の方法でフィールドを条件付きで検証できますか?Rails 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 

それだけの条件ならば、状態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ブロックでこれらをきちんとラップする良い方法がありますか?

答えて

3

with_optionsのおかげでグルーピング検証が本当にきれいです。 hereを参照してください。