Подтвердить что ты не робот

Rails 3 - выберите только определенные столбцы

Ниже приведена связь между комментариями и пользователем. У каждого комментария есть один пользователь, поэтому я создаю соединение в коде ниже.

Мне было интересно, как создать этот код, чтобы включать только определенные столбцы в join. Мне не нужна вся информация пользователя. Просто первое имя. Любые предложения.

Текущий код:

@comments = Comment.where(:study_id => @study.id).joins(:user)
4b9b3361

Ответ 1

Вы можете использовать что-то вроде этого:

@comments = Comment.joins(:user)
                   .select("comments.*, users.first_name")
                   .where(study_id: @study.id)

Ответ 2

Расширение ответа Aldo, чтобы показать способ получить полученное значение внешнего столбца.

@comments = \
  Comment\
  .joins(:user)
  .select("comments.*, users.first_name as users_first_name")
  .where(study_id: @study.id)

# Now it stored on each comment as an attribute, e.g.:
puts @comments.first.read_attribute(:users_first_name)
puts @comments.first.attributes['users_first_name']

# Note that inspecting the comment won't show the foreign data
puts @comments.first.inspect # you won't see user first name output

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