我试图循环显示部分内容中的'offers'集合,但每个'offer'都有一个'featured'列,它是一个默认为false的布尔值。我试图循环收集并仅显示将特色列设置为true的优惠。只有在列为真的情况下渲染部分项目
我目前有:
<%= render @offers %>
以下尝试,但与“未定义的方法 '特色'
<%= render @offers if @offer.featured == true %>
任何帮助将是非常美妙的
我试图循环显示部分内容中的'offers'集合,但每个'offer'都有一个'featured'列,它是一个默认为false的布尔值。我试图循环收集并仅显示将特色列设置为true的优惠。只有在列为真的情况下渲染部分项目
我目前有:
<%= render @offers %>
以下尝试,但与“未定义的方法 '特色'
<%= render @offers if @offer.featured == true %>
任何帮助将是非常美妙的
在你的控制器,另设回来收藏:
@featured_offers = Offer.where(featured: true)
和渲染,与其:
<%= render @featured_offers %>
要更正您即时代码,你呼吁@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 %>