仅在列为真时渲染部分项目

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 %>