Rails:将两个类别的结果合并到一个列表中以供查看

时间:2016-03-06 12:01:43

标签: ruby-on-rails list categories

一篇文章可以属于很多故事。让我们来说政治'和经济#。想在下面的文章中显示相关文章的单个列表。目前让它返回,分两个街区:

Latest Politics Articles
  1. Politics Link
  2. Politics Link
  3. Politics Link

Latest Economy Articles
  1. Economy Link
  2. Economy Link
  3. Economy Link

如何将结果合并到一个列表中?

Latest Politics & Economy Articles
  1. Politics Link
  2. Economy Link
  3. Economy Link
  4. Politics Link
  5. Etc.

文章块的代码目前是:

<% @article.stories.each do |story| %>
  <h3><%= story.story %></h3>
  <ul style="margin-left: 15px;">
    <% story.articles.lastfive.each do |article| %> 
      <li><span class="listing-update-slug"><%= link_to article.headline, article</span></li>
    <% end %>
  </ul>
<% end %>

更新:文章模型:

has_and_belongs_to_many :categories
has_and_belongs_to_many :regions
has_and_belongs_to_many :stories
belongs_to :type
has_many :newsitems
has_many :comments, as: :commentable, dependent: :destroy

...加上一些方法和一堆范围。

1 个答案:

答案 0 :(得分:0)

您可以执行范围并将该问题委托给ActiveRecord:

在文章模型中:

class Article < ActiveRecord::Base
...
:by_stories, -> (s){ joins(:stories).where("stories.id = ?", s)}
...
end

在控制器中:

...
def related_articles
   Article.by_stories(@article.stories.pluck(:id)).where.not(id: @article.id)
end
...