1

我正在检查相关表中的值是否在我看来经常存在,在这种情况下,费用已获得批准。如果它们尚未提交,则批准表中没有它们的记录。

我最终得到了一些非常尴尬的代码

<% if !expense_item.expense_approval || expense_item.expense_approval.approval_status == 0 %>

有没有办法对一个值做一个 if 语句,而不必先检查它是否存在?或者一些默认的方式来设置它为零?

4

2 回答 2

4

您可以在ExpenseItem模型中执行以下操作:

delegate :approval_status, :to => :expense_approval, :allow_nil => true

这应该允许您简单地执行以下操作:

if expense_item.approval_status == 0

上面的 try 方法当然有效,但我更喜欢委托,因为我不必拥有.try(...)所有代码。

于 2012-11-05T16:58:28.543 回答
3

您可以使用 try 方法,如果传递的方法不存在,该方法将返回 nil。所以你可以做类似的事情:

expense_item.expense_approval.try(:approval_status) == 0
于 2012-11-05T16:16:52.230 回答