如何在Rails中过滤控制器中的相关记录?

时间:2016-02-29 13:03:03

标签: ruby-on-rails ruby controller

我有两个模型,ArticleComment,具有一对多的关系。

我的观点如下:

<% @articles.each do |article| %>
  <% article.comments.each do |comment| %>
    some content
  <% end %>
<% end %>

从控制器过滤@articles很容易,例如:

@articles = Article.order('created_at asc').last(4)

我可以轻松过滤我的观点中的评论:

<% @articles.each do |article| %>
  <% article.comments.order('created_at asc').last(4).each do |comment| %>
    some content
  <% end %>
<% end %>

但我不想在我看来放置order('created_at asc').last(4)逻辑。如何从控制器中过滤文章的评论?

1 个答案:

答案 0 :(得分:3)

您可以在模型中执行类似的操作

Class Article < ActiveRecord::Base
  has_many :comments, -> { order 'created_at' } do
    def recent
      limit(4)
    end
  end
end

然后在视图中使用如下

@articles.each do |article| 
    article.comments.recent.each do |comment|
        stuff
    end
end

来源:https://stackoverflow.com/a/15284499/2511498,支持Shane