2

一般的なブログの例を使用します。

class Post < ActiveRecord::Base
  has_many :comments
end
class Comment < ActiveRecord::Base
  belongs_to :post
end

Post にクエリを実行するとき、その関連付け (コメントなど) にどのようにアクセスしますか?

これは世界で最も簡単なことですが、それに関するドキュメントは見つかりませんでした。http://edgeguides.rubyonrails.org/3_0_release_notes.html#query-interfacehttp://m.onkey.org/2010/1/22/active-record-query-interfaceでさえ役に立ちませんでした。ジョインやインクルードのようなメソッドで、SQL ステートメントと同じことを行います。」そう、ありがとう。

だから、私がやりたいことは非常に簡単ですが、うまくいきませんが、私が達成しようとしていることは明らかです。

Post.where(:comments.count >= 10)
Post.where(:comments.author_id == current_user.id)
Post.order(:comments.count)

SQL の匂いがする Ruby コードに頼らずにこれらを行うにはどうすればよいでしょうか (したがって、Active Record の目的を無効にします)。ありがとう :)

4

2 に答える 2

0

コメント用に Post にcounter_cacheを設定すると、クエリを実行しなくてもコメントの数を直接確認できるため、より簡単かつ迅速に処理できます。

これにより、最初と最後の質問が処理されます。

次に、次のようにクエリを実行できます。

  Post.where(:comments_count >= 10)
  Post.order(:comments_count)

ただし、そのためのスコープを設定することをお勧めします。

2 番目の質問で何をしたいのかわかりません。現在のユーザーがコメントしたすべての投稿を表示しますか?

于 2010-10-20T10:26:29.150 に答える
-1

Post.where(:comments.count >= 10)

Post.find(:all).select{|p| p.comments.count >= 10)

Post.where(:comments.author_id == current_user.id)

Post.find(:all).select{|p| p.comments.select{|c| c.author_id == current_user.id } }

Post.order(:comments.count)

Yikes, this one beats me.

また、私の 2 つの投稿は SQL に重きを置いています。私は人々がよりエレガントにそれを行うことを知っています

Post.find(:all, :conditions => blah blah blah..

しかし、私はそれを置く方法がわかりません。ごめん。

于 2010-10-20T10:53:55.863 に答える