2012-04-05 4 views
3

У меня есть модель «Profile» и две ActiveRecord :: Отношения этой модели. SQL-запрос первого отношения очень большой. Второй -Rails merge two ActiveRecord :: Relation's

Profile.where(:id => 1) 

Я хочу добавить второе отношение к первому. Итак, в результате второе отношение будет содержать первый prrofile.

Я попытался

first.merge(second) 

но он возвращает пустое отношение. Версия Rails - 3.2.2 Конечно, результат тоже должен быть отношением. Мне нужно добавить .limit() и .paginate() к этому отношению.

ответ

2

Вы можете прикрепить дополнительные пункты .гда на существующее отношение, таким образом:

relation = Thing.joins(:associated_things => [:users, :still_more_things]).where(:condition => true) 
new_relation = relation.where(:id => 1) 

Это будет сочетать в себе новая «где» с любым существующим с помощью AND. ActiveRecord :: Relation не поддерживает присоединение «wheres» к OR, если вам нужно это сделать, проверьте Squeel (https://github.com/ernie/squeel), если вы используете Rails 3.1+ или meta_where (https://github.com/ernie/meta_where) для 3.0.

0

Слияние переопределяет значения для тех же ключей в первом отношении со значениями из объединенного отношения.