加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – Rails 3验证范围条件

发布时间:2020-12-17 03:30:18 所属栏目:百科 来源:网络整理
导读:我有一个带有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,则必须输入注释. 如果他
我有一个带有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”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读