2

子の属性を使用してクエリをグループ化することはできますか?

Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city') 

動作しません。

ただし、author.city条件の一部として使用できます。

4

4 に答える 4

2

解決策は、ActiveRecord が "authors.city" を解決できるように、必要な結合を強制することです。

Post.find(:all, :include => [ :author, :comments ], :joins=>"INNER JOIN authors ON posts.author_id=authors.id", :group=>'authors.city')
于 2008-09-26T03:56:06.287 に答える
1

If that's what you're using, then the syntax is wrong for the :group argument, it should be:

Post.find(:all, :include => [ :author, :comments ], :group=>'authors.city')

Make sure your :author and :comments associations are correct. If 'authors' is the actual table name, then you'll need a 'has_one :author' association in you Post model, and an Author model.

Associations need to be correct, too:

 class Post < AR:Base
   belongs_to :author
   has_many :comments
 end

 class Author < AR:Base
   has_many :posts
 end

 class Comment < AR:Base
   belongs_to :post
 end

And the db schema:

 posts
   id
   author_id
 authors
   id
 comments
   id
   post_id

This will let the query run correctly, however, now I'm getting an error with the results... the :group clause doesn't seem to be applied when :include is used.

于 2008-09-24T05:19:37.680 に答える
0

著者は複数形を含める必要がありますか?

Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
于 2008-09-24T11:50:38.863 に答える
0

ログ ファイルに生成されたクエリを確認してください。多くの場合、クエリをお気に入りの MySQL ツールに貼り付けて、より詳細なエラーを取得できます。

データベースを正しくグループ化するには、実際には集計関数を提供する必要がある場合があります (これは、構文エラーではなく、MySQL で発生することがあります)。

于 2008-09-24T05:24:49.103 に答える