0

在我的网站上,每个帖子都有很多评论。用户可以通过多种方式对评论进行排序,虽然我可以使用 sort! 来实现这一点,但我确信有一种方法可以使用 MySQL 查询来做到这一点。不幸的是,当我尝试以下方法时,评论返回未排序:

@post.comments.order('created_at DESC')

我也试过:

Comment.where("post_id = ?", @post.id).order('created_at DESC')

虽然我得到了相同的未排序结果。我还能如何解决这个问题?

4

2 回答 2

0

你可以试试这个,看看它是否有效!..我相信可能有更有效的方法来做到这一点,但无论如何这都会成功

@post= @post.comments.sort_by(&:created_at)
@post = @post.reverse

希望这对你有用!

于 2012-09-03T00:54:25.707 回答
0

使用 mysqldatetime函数可能会有所帮助。我没有尝试以下代码段,但它会有点像这样date

Comment.where("post_id = ?", @post.id, :order => 'date(created_at) DESC')

编辑:

尝试过sqlite,以下对我有用

Comment.where("post_id = ?", @post.id, :order => 'time(created_at) DESC')

同样的方法也适用于 mysql。我建议创建一个scope

class Comment < AR::Base
     scope :latest_first, :order => 'time(created_at) DESC'
end

并像使用它一样

Comment.where("post_id = ?", @post.id).latest_first #OR
Comment.latest_first.where("post_id = ?", @post.id)

哪个对你来说听起来更好:)

于 2012-09-03T06:04:29.693 回答