Ruby Joins and Select, но не может видеть все, что выбрано, почему? - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть этот код ...

User.find :all, 
          :select => "users.id, departments.name, users.username, response_sets.id AS 'response_set_id', response_sets.survey_id, COUNT(responses.id) AS 'answers', response_sets.completed_at", 
          :joins => "LEFT JOIN departments ON users.department_id = departments.id LEFT JOIN versions ON departments.version_id = versions.id LEFT JOIN response_sets ON users.id = response_sets.user_id AND versions.survey_id = response_sets.survey_id LEFT JOIN responses ON response_sets.id = responses.response_set_id AND responses.answer_id IS NOT NULL", 
          :conditions => {:id => 4}, 
          :group => "users.id"

И все, что он возвращает, это [#<User id: 4, username: "3333">] должно быть больше?из-за моего :select ??я должен был использовать :include вместо :joins .. все еще учусь .. новичок здесь!хР

Ответы [ 3 ]

0 голосов
/ 08 сентября 2011

ActiveRecord в Rails дает вам вид ORM.Это означает, что вы работаете с объектом.Поэтому, когда вы используете include для объединения других таблиц - их поля не появятся в таблице результатов.Чтобы получить их, вам нужно позвонить parent_table.joined_table.your_field по результатам запроса.С join - поле будет доступно.Поэтому, если вы присоединились к некоторым таблицам, будет лучше явно обратиться к ним и получить их столбцы.Кстати, разница показаний между join и include: метод поиска

0 голосов
/ 08 сентября 2011

Пример

...select("orders.*, cities.name AS city_name, countries.name AS country_name, customers.account_id as customer_acc").
      joins("LEFT JOIN customers ON customers.id = orders.customer_id")....

и затем я могу получить доступ к дополнительным данным с помощью []

<td><%= order[:country_name] %></td>
<td><%= order[:city_name] %></td>
0 голосов
/ 08 сентября 2011

На самом деле во всех случаях есть больше, но то, что вы видите, является результатом вызова метода inspect, который будет показывать только содержимое фактических столбцов из модели User.Но если вы попытаетесь вызвать другие значения, возвращаемые вашим утверждением, вы сможете увидеть результат.Например:

@users.first.response_set_id # => will return the value from response_sets.id
@users.first.answers         # => will return the value from COUNT(responses.id)
...