:if
の代わりにオプションを探しています:scope
。
validates :approver_note, :presence => true,
:if => lambda { |invoice| invoice.state_id == 3 }
しかし、ラムダは少し醜いので、私はおそらくあなたがやっていることを少し良くカプセル化するためのメソッドを追加するでしょう:
validates :approver_note, :presence => true, :if => :requires_note?
validates :po_number, :presence => true, :if => requires_po_number?
def requires_note?
state_id == 3
end
def requires_po_number?
state_id == 2
end
が3の場合に必要なさまざまな属性が実際にある場合state_id
は、メモだけでなく、次のようなものが必要になる場合があります。
validates :approver_note, :presence => true, :if => :green_state?
validates :po_number, :presence => true, :if => orange_state?
def green_state?
state_id == 3
end
def orange_state?
state_id == 2
end
(「緑」を-私は知らない-「high_documentation」またはあなたの世界で意味のあるものに置き換えてください。)
または、州にそれが何であるかを決定させたい場合もあります。
def green_state?
state.green?
end
「3」や「2」ではなく、コード内の用語を実際の言語により厳密に準拠させるのに役立ちます。