Rails如果语句显示1,如果两者都为真

时间:2014-07-01 21:50:31

标签: ruby-on-rails ruby-on-rails-3 spree

我有一个产品页面,如果产品上有产品,那么它会显示和提供标签,如果产品在销售中,那么它会显示一个SALE标签,但如果一个产品在销售中并且有一个报价,那么我只想要显示OFFER标签。

当前视图

<% if product.possible_promotions.any? %>
  <div data-hook="promotions" class="offer-label">
    <span>Offer</span>
  </div>
<% end %>

<% if product.sale_price.present? %>
  <div class="offer-label sale-offer-label">
    <span>Sale</span>
  </div>
<% end %>

如果两者都返回true,则只显示顶部div。

1 个答案:

答案 0 :(得分:3)

所以基本上你想要排除底部div,除非sale_price存在且possible_promotions为空。假设possible_promotions是一个数组,那么应该这样做:

<% if product.possible_promotions.any? %>
  <div data-hook="promotions" class="offer-label">
    <span>Offer</span>
  </div>
<% end %>

<% if product.sale_price.present? && product.possible_promotions.empty? %>
  <div class="offer-label sale-offer-label">
    <span>Sale</span>
  </div>
<% end %>

或者您可以在链接的if-elsif语句中执行此操作:

<% if product.possible_promotions.any? %>
  <div data-hook="promotions" class="offer-label">
    <span>Offer</span>
  </div>
<% elsif product.sale_price.present? %>
  <div class="offer-label sale-offer-label">
    <span>Sale</span>
  </div>
<% end %>

要么工作。

另一种解决方案是编写一个接受产品的帮助程序,决定可用的商品/销售,然后返回适当的内容。然后在您的视图中,您可以使用此:

<%= special_offer_for product %>

有了这样的帮助,请在products_helper.rb

中说明
def special_offer_for(product)
  if product.possible_promotions.any?
    render :partial => 'products/offer', :locals => { :offer_title => product.promotion }
  elsif product.sale_price.present?
    render :partial => 'products/sale', :locals => { :sale_price => product.sale_price }
  end
end

将适当的布局/内容/等放入部分中。如果需要,您可以使用:locals哈希将变量传递到partials中,如上例所示。