Ruby on rails Rails—始终必须检查是否存在,然后检查值?

Ruby on rails Rails—始终必须检查是否存在,然后检查值?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在检查相关表中的值在我看来是否经常存在,在这种情况下,费用有批准。如果尚未提交,则审批表中没有记录 我最终得到了一些非常尴尬的代码 <% if !expense_item.expense_approval || expense_item.expense_approval.approval_status == 0 %> 有没有一种方法可以对一个值执行if语句,而不必先检查它是否存在?或者使用某种默认方法将其设置为nil?您可以使用try方法,如果传递的方法不存在,该方法将返回ni

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

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

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

有没有一种方法可以对一个值执行if语句,而不必先检查它是否存在?或者使用某种默认方法将其设置为nil?

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

expense_item.expense_approval.try(:approval_status) == 0

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

expense_item.expense_approval.try(:approval_status) == 0

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

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

if expense_item.approval_status == 0

上面的try方法当然有效,但我更喜欢委派,因为我不需要委派。试试。。。我的所有代码。

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

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

if expense_item.approval_status == 0

上面的try方法当然有效,但我更喜欢委派,因为我不需要委派。试试。。。我的所有代码。

啊,太棒了。try是我的新朋友!也可以看看Avdi Grrimms自信的Ruby talks/书,他谈了很多类似的事情啊,太棒了。try是我的新朋友!另外,看看Avdi Grrimms自信Ruby talks/book,他谈了很多类似的事情,一个叫Demeter的家伙说+1,另一个答案是正确的,但是这个匹配案例要好得多+1来自一个叫Demeter的家伙,另一个答案是正确的,但是这个匹配案例要好得多