仅在列为真时渲染部分项目
Render Partial Item only if column is true
我试图部分循环我的 'offers' 集合,但每个 'offer' 都有一列 'featured',它是一个默认为 false 的布尔值。我正在尝试遍历集合并仅显示将特色列设置为 true 的商品。
我目前有:
<%= render @offers %>
尝试下面但返回“未定义的方法'featured'
<%= 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 %>
我试图部分循环我的 'offers' 集合,但每个 'offer' 都有一列 'featured',它是一个默认为 false 的布尔值。我正在尝试遍历集合并仅显示将特色列设置为 true 的商品。
我目前有:
<%= render @offers %>
尝试下面但返回“未定义的方法'featured'
<%= 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 %>