3

私はアイテムを持っていて、has_one関係の価格を持っています。価格オブジェクトには、価格値があります(残念ながらtrue)。item.price.priceのnil以外の値をテストできるようにしたいと思います。ビューにadd_to_orderは、price.priceがある場合にのみ表示されるヘルパーメソッドがあります。私はこの状態を使用してテストします:

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

しかし、それはかなり醜いようです。これをテストするためのより簡潔な/「より良い」方法はありますか?

事前にt​​hx

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

Object#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がゼロでも安全に動作します

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