У меня есть 3 модели: учетная запись, обсуждение и тег (предоставленный is_taggable)
class Account
has_many :discussions
end
class Discussion
belongs_to :account
has_many :tags
is_taggable
end
Я хочу иметь возможность сделать current_account.tags, чтобы перечислить все теги, которые в настоящее время используются обсуждениями аккаунта. Итак ...
class Account
has_many :discussions
has_many :tags, :through => :discussions, :source => :taggings
end
Примечание: источник тегов предназначен для таблицы соединений, которую is_taggable использует для объединения тегов в вашу модель тегов (в данном случае обсуждения ...)
Проблема с выходом из этого HM: таким образом, многократное вхождение одного и того же тега в разные обсуждения заставит их появляться в этой ассоциации одинаковое количество раз. Поэтому я подумал: «Нет проблем, я сгруппирую эту ассоциацию в tag_id таблицы тегов, поэтому каждый тег отображается только один раз.
class Account
has_many :discussions
has_many :tags, :through => :discussions, :source => :taggings, :group => "taggings.tag_id"
end
Это не работает, дальнейшее изучение SQL, которое генерируется, показывает, что GROUP BY не появляется в SQL. Мой вопрос, как мне заставить это работать?
Некоторые другие вещи, которые я пробовал:
- Создание экземпляра метода «теги». Хотя это вернуло мой набор результатов должным образом, это не была коллекция AR, и поэтому я не мог манипулировать ею как таковой. (может, кто-то знает, как это сделать правильно?)
- Используйте параметр: unique => true. Похоже, это сработает, но так как мы создаем таблицу: taggings, это то, что она пытается сделать уникальной, и все записи в этой таблице
уникальный (tag_id + taggable_id [наше обсуждение]), ничего не меняется.
Заранее благодарим за любую помощь и приносим извинения за любые опечатки, связанные с iPad.