我有一个产品页面,如果产品上有产品,那么它会显示和提供标签,如果产品在销售中,那么它会显示一个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。
答案 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中,如上例所示。