我正在检查以查看相关表中的值是否经常存在于我的视图中,在这种情况下,费用有批准。如果他们没有提交,那么他们在审批表中没有记录。Rails - 总是必须检查是否存在,然后值?
我结束了一些好不尴尬代码
<% if !expense_item.expense_approval || expense_item.expense_approval.approval_status == 0 %>
有没有办法在一个值的if语句做,而不必检查它是否存在第一?或者一些默认的方式来设置它为零?
我正在检查以查看相关表中的值是否经常存在于我的视图中,在这种情况下,费用有批准。如果他们没有提交,那么他们在审批表中没有记录。Rails - 总是必须检查是否存在,然后值?
我结束了一些好不尴尬代码
<% if !expense_item.expense_approval || expense_item.expense_approval.approval_status == 0 %>
有没有办法在一个值的if语句做,而不必检查它是否存在第一?或者一些默认的方式来设置它为零?
你可以做你的ExpenseItem
模型如下:
delegate :approval_status, :to => :expense_approval, :allow_nil => true
这应该让你只需做到以下几点:
if expense_item.approval_status == 0
的尝试上面的方法当然有效,但我更喜欢委派,因为我不必在我的代码中都有.try(...)
。
你可以使用try方法,如果传递的方法不存在,它将返回nil。所以你可以这样做:
expense_item.expense_approval.try(:approval_status) == 0
啊,太棒了,.try是我的新朋友! – Atari2600
还检查了Avdi Grrimms自信的Ruby谈话/书他谈论了很多关于这样的事情 –
从一个叫Demeter的人+1,另一个答案是正确的,但这种情况匹配得更好 – ecoologic
谢谢你,今天学习很多 – Atari2600