您正在寻找:if
选项而不是:scope
.
validates :approver_note, :presence => true,
:if => lambda { |invoice| invoice.state_id == 3 }
但由于 lambda 有点难看,我可能会添加一个方法来更好地封装你正在做的事情:
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
如果您实际上有一堆在state_id
3 时需要的不同属性,而不仅仅是一个注释,那么您可能想要这样的东西:
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”相反,它确实有助于使您的代码中的术语更贴近您的实际语言。