我有文章
class Article < ActiveRecord::Base
has_many :comments, dependent: :destroy
validates :title, length: { minimum: 3, maximum: 100 }
validates :text, length: { minimum: 5, maximum: 3000 }
end
我有
class Comment < ActiveRecord::Base
belongs_to :article
validates :body, presence: true,
length: { maximum: 3000 }
end
我需要向用户显示可用文章列表,但是按评论的时间戳排序。就像一个图像板,当你在一个线程上发布东西时,线程会“碰到”顶部。
我设法<% @articles.joins(:comments).order('comments.created_at desc').each do |article| %>
来了。它以正确的方式排序,但它显示相同的线程乘以其上的帖子数量。例如,如果一个帖子有5个回复,则会向用户显示5个不同的时间。我该如何解决这个问题?
CNC中
使用组.group('articles.title')
实际上工作。但我发现加入不包括尚无评论的文章。我将其切换为 includes ,显然它有效。但现在我遇到的问题是,没有任何评论的帖子最终会出现在列表的底部,我需要它们在顶部。一个解决方案是在创建文章时创建一个空注释,但我不知道如何做到这一点-EDIT2-我解决了它。我这样做是为了与帖子一起创建一个自动评论,所以每个帖子都有一个带有时间戳的评论来进行比较。我只是将这行@comment = @article.comments.create(body: '~start~')
放在@ article.save循环
答案 0 :(得分:2)
您可以使用分组
<% @articles.joins(:comments).order('comments.created_at desc').group('articles.title').each do |article| %>
答案 1 :(得分:1)
您可以在查询中致电#distinct
:http://apidock.com/rails/ActiveRecord/QueryMethods/distinct
答案 2 :(得分:0)
这个怎么样?
# controller
@articles = Article.includes(:comments).order('comments.created_at desc')