Чтобы установить сцену, я использую рельсы 3, и у меня есть эти таблицы и отношения:
user has_many lists
list has_many tasks
task has_many stints
Я хотел бы создать запрос, который позволит мне выбрать все текущие пользовательские записи,и чтобы list.id был доступен в качестве атрибута для каждого этапа в результате.Мне нужно было бы переименовать list.id в list_id, потому что в противном случае он перезаписывает атрибут id ограничения в результате.Я подумал, что «как» будет работать, но это не так.
Это дает мне последний срок, принадлежащий пользователю 1:
Stint.joins(:task => [{:list => :user }]).where(:lists => {:user_id => 1 }).last
=> #<Stint id: 753, task_id: 245>
Однако мне хотелось бы, чтобы:
=> #<Stint id: 753, task_id: 245, list_id: 2>
Итак, я подумал, что это сработает:
Stint.joins(:task => [{:list => :user }]).where(:lists => {:user_id => 1 }).select('stints.*, lists.id as list_id').last
=> #<Stint id: 753, task_id: 245>
Как видите, разницы нет.Но если я не использую «как», я получаю это:
Stint.joins(:task => [{:list => :user }]).where(:lists => {:user_id => 1 }).select('stints.*, lists.id').last
=> #<Stint id: 2, task_id: 245>
Используется list.id, но поскольку атрибут установлен с именем «id», он скрывает stint.id.
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ - SQL в порядке.Запрос возвращает правильные столбцы и значения, включая list_id.
Проблема заключается в том, что он не создает атрибут в модели.