2012-11-05 30 views
1

我正在检查以查看相关表中的值是否经常存在于我的视图中,在这种情况下,费用有批准。如果他们没有提交,那么他们在审批表中没有记录。Rails - 总是必须检查是否存在,然后值?

我结束了一些好不尴尬代码

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

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

回答

4

你可以做你的ExpenseItem模型如下:

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

这应该让你只需做到以下几点:

if expense_item.approval_status == 0 

的尝试上面的方法当然有效,但我更喜欢委派,因为我不必在我的代码中都有.try(...)

+1

从一个叫Demeter的人+1,另一个答案是正确的,但这种情况匹配得更好 – ecoologic

+0

谢谢你,今天学习很多 – Atari2600

3

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

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

啊,太棒了,.try是我的新朋友! – Atari2600

+2

还检查了Avdi Grrimms自信的Ruby谈话/书他谈论了很多关于这样的事情 –

相关问题