仅当列为true时才渲染部分项

时间:2015-10-10 13:53:06

标签: ruby-on-rails ruby ruby-on-rails-4 partial-views

我试图推翻我的优惠'收集部分,但每个提供'有专栏'这是一个默认为false的布尔值。我试图遍历集合,只显示特色列设置为true的商品。

我目前有:

<%= render @offers %>

尝试以下内容,但使用未定义的方法&#39;特色&#39;

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

任何帮助都会很棒

2 个答案:

答案 0 :(得分:4)

在您的控制器中,设置另一个集合:

@featured_offers = Offer.where(featured: true)

然后改为:

<%= render @featured_offers %>

答案 1 :(得分:1)

要更正即时代码,您需要在.featured上调用@offer - 这不存在。

您需要循环遍历@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 %>