Rails 3 возвращает все столбцы из объединения - PullRequest
6 голосов
/ 27 ноября 2010

Я пытаюсь объединить две таблицы и вернуть все столбцы, а не только те, которые связаны с моделью.

У меня что-то подобное выглядит так:

Comment.joins(:user).select("*")

SQL выглядит нормально, но, тем не менее, он возвращает только комментарии и никакой пользовательской информации, связанной с ним.

Как я могу получить *, а не только comments.*?

Ответы [ 4 ]

8 голосов
/ 28 ноября 2010

А как же

comments = Comment.includes(:user).all

Теперь comments будет массивом, поэтому вам придется пройти через него, чтобы увидеть всех пользователей.

#won't work
comments.user 

#should work
comments[0].user

comments.each do |comment|
    puts comment.user.name #or whatever
end
2 голосов
/ 27 ноября 2010

Это должно работать:

comments = Comment.joins(:user).includes(:user)

Но вот что я думаю, что происходит, если вы просматриваете вывод в своих окнах консоли, я думаю, что вывод консоли отражает / проверяет только объект корневого уровня, который

Я только что провел эксперимент, в котором выполнил приведенный выше код.Вывод терминала записал, что он получил комментарии, но не упомянул ассоциированного пользователя.Затем я закрываю базу данных, чтобы второй запрос не мог быть выполнен к базе данных, затем запрашивал ассоциированного пользователя, например,

comments.user

. Консоль выводит пользователя, что доказывает, что он уже готовзагружен, поскольку не было попытки подключения к базе данных.

1 голос
/ 09 октября 2013

У Райана Бейтса есть хороший учебник по этому предмету.

http://railscasts.com/episodes/22-eager-loading-revised?autoplay=true

1 голос
/ 27 ноября 2010
.

Comment.select ( '*') включает в себя (: пользователь)

...