如何检查相关属性的非零值 - 是否有更简洁的方法?

时间:2013-01-10 18:13:56

标签: ruby ruby-on-rails-3

我有物品,他们的价格与has_one有关系。在价格对象中,有一个价格值(不幸的是真实的)。我希望能够测试item.price.price的非零值。在视图中,有一个add_to_order辅助方法,只有在有price.price时才会显示。我用以下方法测试这个条件:

<% if item.price && !item.price.price.nil? %>
  <%=add_to_order item %>
<% end %>

但看起来很难看。是否有更简洁/“更好”的测试方式?

事先提前

3 个答案:

答案 0 :(得分:1)

我会尽量避免使用您的视图中的逻辑,只需让add_to_order方法处理item验证。

def add_to_order(item)
  return unless price = item.price.try(:price)
  # ... your implementation
  # the items price is in the price variable for you
end

Object#try

您的观点将变为:

<%=add_to_order item %>

因为你的所有逻辑都在add_to_order辅助方法中。

答案 1 :(得分:1)

Rails为try method提供了语法糖:

<% unless item.price.try(price).nil? %>
  <%= add_to_order item %>
<% end %>

答案 2 :(得分:1)

您可以使用try。即使item.price为nil

,它也能安全地工作
<% unless item.price.try(:price) %>
  <%=add_to_order item %>
<% end %>