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

mysqldateまたはtime関数を使用すると役立つ場合があります。次のスニペットは試しませんでしたが、次のようになります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 に答える