Группировка запроса Activerecord по дочернему атрибуту - PullRequest
2 голосов
/ 24 сентября 2008

Можно ли использовать атрибут потомка для группировки запроса?

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

не работает.

Однако я могу использовать author.city как часть условий.

Ответы [ 4 ]

2 голосов
/ 26 сентября 2008

Решение состоит в том, чтобы принудительно выполнить необходимое объединение, чтобы ActiveRecord мог разрешить "author.city":

Post.find(:all, :include => [ :author, :comments ], :joins=>"INNER JOIN authors ON posts.author_id=authors.id", :group=>'authors.city')
1 голос
/ 24 сентября 2008

Если это то, что вы используете, то синтаксис неверен для аргумента: group, он должен быть:

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

Убедитесь, что ваши ассоциации: author и: comments верны. Если «авторы» - это фактическое имя таблицы, то вам понадобится ассоциация «has_one: author» в вашей модели Post и модель Author.

Ассоциации должны быть правильными:

 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

И схема БД:

 posts
   id
   author_id
 authors
   id
 comments
   id
   post_id

Это позволит правильно выполнить запрос, однако теперь Я получаю ошибку с результатами ... Предложение: group, похоже, не применяется, когда используется: include.

0 голосов
/ 24 сентября 2008

Должен ли автор включать множественное число?

Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
0 голосов
/ 24 сентября 2008

Посмотрите на запрос, который генерируется в вашем файле журнала - вы можете часто вставлять запрос в ваш любимый инструмент MySQL, чтобы получить более подробную ошибку.

Возможно, вам понадобится агрегатная функция для правильной группировки базы данных (иногда это происходит в MySQL, а не в синтаксической ошибке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...