Railsの最新のコメントのみをつかむ

ruby-on-rails

Railsの典型的なUser-Post-Commentモデルでは、すべてのユーザーが投稿を作成でき、またコメントも作成できます。質問は、特定の投稿についてすべてのユーザーの最新のコメントを取得する方法です。

例:

投稿A 3のユーザーがコメント1を持っていますユーザー1のコメント1、2、3、4、5、6ユーザー2のコメント1、2、3、4ユーザー3のコメント1、2

だから私が欲しいビューは、すべてのユーザーにとって単なる最新のコメントです。

投稿A 3人のユーザーがコメントしていますユーザー1最新のコメント6人ユーザー2最新のコメント4人ユーザー3最新のコメント2人

どうやってするの ?

ありがとう

  0  0


ベストアンサー

このようなもの:

post.comments.for_user(current_user).last

モデルにnamed_scopeを追加します

classコメントnamed_scope:for_user、lambda {| user |} {:conditions => {:user_id => user.id}} end

これでうまくいくはずです。

あなたがむしろレールでそれをするならば、

messages_by_users = post.messages.group_by(

messages_by_users.each do |キー、値| messages_by_users [key] = value.last end

1


私はこの種のデータを入手しなければなりませんでした、そして通常私は2つの質問をすることになります。 私の場合、私はブログとその投稿を持っていて、そのブログはユニークであるという制限のある最新の3つのブログ投稿のリストが欲しいのですが、同じブログから2つの投稿は欲しくありません。 私はこのようなことをしてしまいました(MySQL)。

q = <<  -  EOQ SELECT ID、pub_date FROM投稿(SELECT ID、blog_id、pub_date投稿元ORDER BY pub_date DESCリミット40) )Post.find(:all、:include => [:blog]、:conditions => ["id IN(?)"、post_ids]、:order => "posts.pub_date DESC")

だからあなたの場合は、次のようになるでしょう。

q = <<  -  EOQ SELECT ID FROM(SELECT ID、post_id FROMコメントORDER BY ID DESC LIMIT 40)t GROUP BY post_id OR ID BY ID DESC LIMIT 10 EOQ post_ids = Post.connection.select_values(q)Post.find(:all 、:include => [:blog]、:conditions => ["id IN(?)"、post_ids]、:order => "posts.id DESC")

0


データベースがコメントに連続IDを割り当てていると仮定すると、これを行うことができます。

クラスコメントnamed_scope:most_recent、lambda {lastest_comments = Comment.maximum:id、:group => "user_id、post_id" {:条件=> ["comment_id in?"、lastest_comments.map(

これにより、さまざまな方法で使用できる2つのクエリ方法が得られます。 上記の `named_scope`は全ての投稿の全てのユーザに対する最新のコメントを引き戻します。 データベースが巨大な場合、これは問題になる可能性がありますが、確実に条件を追加してより具体的にすることができます。

現状では、これは次のことを可能にする柔軟な方法です。

Comment.most_recent.find_by_user @user# - >ユーザーによるすべての投稿に対する最新のコメント@ user.comments.most_recent# - >上記と同じ

Comment.most_recent.find_by_post @post# - >全ユーザによる単一の投稿に対する最新のコメント@ post.comments.most_recent# - >上記と同じ

Comment.most_recent.find_by_user_and_post @user、@ post# - >特定の投稿に対する特定のユーザーによる特定の最新のコメント@ post.comments.most_recent.find_by_user @user# - >あなたはアイデアを得る

0


タイトルとURLをコピーしました