Правильно, я думаю, что на самом деле вам не нужен пункт joins в rails 3. Если вы используете include и куда, Arel сделает за вас тяжелую работу.
Я проверил это (хотя и использовал другой набор моделей (и атрибутов), чем ваш), используя модели с тем же базовым расположением ассоциаций, и я думаю, что это должно работать:
в моделях / user.rb:
scope :with_group_and descriptions, lambda { |group_id| includes(:groups, :descriptions).where(:groups => { :id => group_id }, :descriptions => { :group_id => group_id }) }
Тогда в вашем контроллере вы звоните:
@users = User.with_group_and_descriptions(params[:id])
Наконец, в представлении вы можете сделать:
@users.each do |user|
user.name
user.descriptions.each do |desc|
desc.content
# or
@users.each do |user|
user.name
user.descriptions[0].content
Если я правильно понял, то это должно сделать только 2 дБ. Один для получения списка user_ids, второй для получения данных о пользователе, группе и описании, и даже при том, что вы вызываете метод описаний объекта пользователя, который обычно содержит все описания (а не только для определенной группы). ), поскольку вы уже заполнили рельсы ассоциаций, они не будут снова захватывать все ассоциации при вызове user.descriptions
, а просто перечислят те, которые вы извлекли из БД, используя describ.group_id пункт. Однако вызов user.descriptions(true)
приведет к перезагрузке описаний, что приведет к возвращению массива всех ассоциаций описания для пользователя.