2010-11-27 1 views
6

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

У меня есть что-то подобное выглядит следующим образом:

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

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

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

ответ

7

насчет

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 
1

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

+0

Право - Я не был уверен, что если бы вы были обеспокоены SQL или просто получить данные обратно. В этом случае вы возвращаете оба комментария и пользователей, не возвращаясь к БД. – Cory 2010-11-27 15:42:13

+0

Just do Comment.select («Комментарии. *, Пользователи. *») – Cory 2010-11-27 15:42:45

2

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

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

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

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

comments.user 

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

+0

Интересно. Я думал о том же самом. Хотя кэширование запросов может сбить с толку, вы также можете заметить, запускается ли запрос при выполнении `comments.user`. – wuliwong 2013-06-04 14:52:04