2015-10-10 49 views
3

我试图循环显示部分内容中的'offers'集合,但每个'offer'都有一个'featured'列,它是一个默认为false的布尔值。我试图循环收集并仅显示将特色列设置为true的优惠。只有在列为真的情况下渲染部分项目

我目前有:

<%= render @offers %> 

以下尝试,但与“未定义的方法 '特色'

<%= render @offers if @offer.featured == true %> 

任何帮助将是非常美妙的

回答

4

在你的控制器,另设回来收藏:

@featured_offers = Offer.where(featured: true) 

和渲染,与其:

<%= render @featured_offers %> 
1

要更正您即时代码,你呼吁@offer.featured - 它不存在。

你要么通过@offers需要循环和offer使用逻辑,或使用条件的部分内(这是非常低效的):

<% @offers.each do |offer| %> 
    <%= render offer if offer.featured %> 
<% end %> 

<%= render @offers %> 

#_offer.html.erb 
<% if offer.featured %> 
    This is super inefficient 
<% end %> 

-

@jason对他的推荐使用where条款

你甚至可以走得更远了一步,并成立了scope

#app/models/offer.rb 
class Offer < ActiveRecord::Base 
    scope :featured, -> { where featured: true } 
end 

@offers = Offer.featured 

你甚至可以链范围:

@offers = Offer.where(user_id: params[:id]) 

<%= render @offers.featured %> 
相关问题