循环浏览要推广的帖子

时间:2019-06-08 23:44:11

标签: ruby-on-rails ruby

如何循环浏览已升级的帖子。我的帖子模型中有一个可以访问的方法。在这种情况下,我怎么称呼它。例如,这是我的帖子模型的方法。

class Post < ApplicationRecord
def promoted?
    subscriptions.present?
  end

  def self.promoted_posts
    Post.joins(:subscriptions).where(:subscriptions => {:is_active => true})
  end

  def self.not_promoted_posts
    Post.left_outer_joins(:subscriptions).where(:subscriptions => {:post_id => nil})
  end

  def self.ordered_posts
    Post.promoted_posts + Post.not_promoted_posts
  end
end

这是我的看法。我想遍历所有被提升的帖子,这是“ def提升?”方法。在我的模型中

<% @posts.take(6).each do |post| %>
      <div class="col-xs-6 col-sm-6 col-md-6 col-lg-4">
        <div class="featured-box">
          <figure>
            <%= link_to image_tag(post.images.first, class: 'img-fluid'), post %>
          </figure>
          <div class="feature-content">
            <div class="product">
              <p><%= post.category.name %> / <%= post.subcategory.name %></p>
            </div>
            <h4><%= link_to post.title, post %></h4>
            <ul class="address">
              <li>
                Ad#: <%= post.ad_number %>
              </li>
              <li>
                posted <%= time_ago_in_words(post.created_at) %> ago
              </li>
              <li>
                <%= post.state%> , <%= post.city.downcase %>
              </li>
            </ul>
            <div class="listing-bottom">
              <h3 class="price float-left">$<%= post.price%></h3>
              <%= link_to 'Feature Ad', post, class: 'btn-verified float-right', style: 'color: red;' %>
            </div>
          </div>
        </div>
      </div>
      <% end %>

1 个答案:

答案 0 :(得分:0)

如果您迫切需要使用升级版,可以尝试

Post.all.find_all(&:promoted?)

的缩写
Post.all.find_all do |post|
    post.promoted?
end

这是一种n + 1查询,您可以在使用时选择它

Post.joins :subscriptions

是失败的。