Стремительная загрузка с полиморфной ассоциацией, используя условия другой включенной ассоциации - PullRequest
2 голосов
/ 28 ноября 2011

У меня есть фид активности, и я хочу загрузить все присутствующие активности.

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

Тогда у меня есть таблица 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-запрос, который мог бы сохранить.

...