Я использую полиморфные ассоциации для отслеживания комментариев в моем проекте. Все очень простые вещи.
Проблема, с которой я столкнулся, заключается в запросах, основанных на полиморфной ассоциации, и присоединении модели Comment к ее владельцу.
Итак ...
У меня есть комментарий модели
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
И режим ForumTopics:
class ForumTopic < ActiveRecord::Base
has_many :comments, :as => :commentable
end
У меня есть несколько других «комментируемых» моделей, которые сейчас не важны.
Все это работает.
Я пытаюсь найти все комментарии, принадлежащие форумной теме с заданным условием (в данном случае «featured» == true).
Когда я пытаюсь использовать искатель для объединения моделей:
@comments = Comment.find(:all
:joins => :commentable
:conditions => ["forum_topics.featured = ? ", true]
)
Я получаю следующую ошибку:
Невозможно загрузить полиморфную ассоциацию: комментируется
Использование AR "включить синтаксис":
@comments = Comment.find(:all
:include => :forum_topics
:conditions => ["forum_topics.featured = ? ", true]
)
возвращается:
Ассоциация с именем forum_topics не найдена; возможно, вы ошиблись?
Если я попытаюсь соединиться с именем таблицы вместо имени ассоциации (строка вместо символа):
@comments = Comment.find(:all,
:joins => "forum_topics",
:conditions => ["forum_topics.featured = ? ", true]
)
Понятно:
Mysql :: Ошибка: неизвестная таблица 'comments': ВЫБРАТЬ комментарии. FROM comments forum_topics WHERE (forum_topics.featured = 1) *
(Здесь видно, что синтаксис базового запроса полностью отключен, а объединение вообще отсутствует).
Не уверен, что то, что я делаю, возможно, и есть другие способы достижения требуемого результата, но кажется, что должно быть выполнимым.
Есть идеи?
Что-то мне не хватает?