2015-10-10 81 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 %> 
相關問題