我有物品,他们的价格与has_one有关系。在价格对象中,有一个价格值(不幸的是真实的)。我希望能够测试item.price.price的非零值。在视图中,有一个add_to_order
辅助方法,只有在有price.price时才会显示。我用以下方法测试这个条件:
<% if item.price && !item.price.price.nil? %>
<%=add_to_order item %>
<% end %>
但看起来很难看。是否有更简洁/“更好”的测试方式?
事先提前答案 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
您的观点将变为:
<%=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 %>