子の属性を使用してクエリをグループ化することはできますか?
Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
動作しません。
ただし、author.city
条件の一部として使用できます。
子の属性を使用してクエリをグループ化することはできますか?
Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
動作しません。
ただし、author.city
条件の一部として使用できます。
解決策は、ActiveRecord が "authors.city" を解決できるように、必要な結合を強制することです。
Post.find(:all, :include => [ :author, :comments ], :joins=>"INNER JOIN authors ON posts.author_id=authors.id", :group=>'authors.city')
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.
著者は複数形を含める必要がありますか?
Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
ログ ファイルに生成されたクエリを確認してください。多くの場合、クエリをお気に入りの MySQL ツールに貼り付けて、より詳細なエラーを取得できます。
データベースを正しくグループ化するには、実際には集計関数を提供する必要がある場合があります (これは、構文エラーではなく、MySQL で発生することがあります)。