У меня есть фид активности, и я хочу загрузить все присутствующие активности.
У каждого действия есть актер, который является полиморфным.Предположим, что в качестве акторов могут быть пользователи или группы.
Тогда у меня есть таблица UserActivity, чтобы узнать, какие действия скопированы для какого пользователя.
Теперь для канала активности я хочузагрузите всех пользователей и группы, которые являются действующими лицами для каждого действия.
Я читал, и я знаю, что он сгенерирует несколько условий SQL, потому что для включения есть полиморфная ассоциация.Мое предложение теперь таково:
@activities = Activity.find(:all, :order=>"activities.updated_at DESC", :conditions => ['user_activities.user_id=?', @user.id], :include=> [:user_activities, :actor])
Однако возникает ошибка:
«Невозможно загрузить полиморфную ассоциацию: актер»
Я попробовал то же самое, но без условий, и он работает, генерируя только SQL-запросы для ассоциаций, которые являются действующими лицами в действиях, которые принимаются во внимание.(Следующее предложение работает)
@activities = Activity.find(:all, :order=>"activities.updated_at DESC", :include=> [ :user_activities, :actor])
Но, конечно, это не то, что я хочу сделать, потому что я хочу иметь условие, но я не вижу способа заставить его работать.Я попытался использовать вариант вместо условия, и он не работает, и вместо этого я использовал include, потому что я читал, что: include был объявлен устаревшим для Rails 3.
Это очень важно для приложения, потому что оноэто фид активности, поэтому вы можете себе представить, что он будет генерировать много трафика.
И я не хочу делать запрос каждый раз, когда фид перезагружается для получения всех пользователей и групп, которые находятся в действиях.потому что если бы все действия, показанные за один раз, не имели одного типа актера, я бы сделал SQL-запрос, который мог бы сохранить.