我有一个带有approver_note,po_number和state_id的发票模型.
我需要验证来检查:
validates :approver_note,:presence => true,{:scope => state_id == 3} validates :po_number,{:scope => state_id ==2}
因此,如果用户选择state_id = 3,则必须输入注释.
如果他选择state_id = 2,他必须输入一个po_number.
任何帮助都会很棒……谢谢!
解决方法
您正在寻找:if选项而不是:scope.
validates :approver_note,:if => lambda { |invoice| invoice.state_id == 3 }
但是由于lambda有点难看,我可能会添加一种方法来封装你做得更好的东西:
validates :approver_note,:if => :requires_note? validates :po_number,: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,:if => :green_state? validates :po_number,: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”.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。