3

我有物品,它们的价格是 has_one 关系。在价格对象中,有一个价格值(不幸的是)。我希望能够测试 item.price.price 的非零值。在视图中,有一个add_to_order辅助方法应该仅在有 price.price 时才显示。我测试使用这种情况:

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

但它看起来很丑陋。有没有更简洁/“更好”的测试方法?

提前谢谢

4

3 回答 3

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

对象#try

你的观点会变成:

<%=add_to_order item %>

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

于 2013-01-10T18:17:44.010 回答
1

Rails 使用try 方法为此提供了语法糖:

<% unless item.price.try(price).nil? %>
  <%= add_to_order item %>
<% end %>
于 2013-01-10T18:17:53.227 回答
1

您可以使用try. 即使 item.price 为 nil,它也会安全工作

<% unless item.price.try(:price) %>
  <%=add_to_order item %>
<% end %>
于 2013-01-10T18:17:56.623 回答