Rails Joins Выбрать связанные столбцы не работает - PullRequest
0 голосов
/ 19 февраля 2020

Я работаю над приложением Ruby на Rails,

AnalyticsPage имеет следующие отношения. Отношения «многие ко многим» с пользователями.

class AnalyticsPage < ApplicationRecord
  belongs_to :graph_page_layout
  has_many :analytics_pages_users
  has_many :users, through: :analytics_pages_users
  has_many :graph_sections
end

##### query #####
I need to write query where I need to fetch the columns from both of the tables.
analytics_pages = AnalyticsPage.select('users.first_name, users.last_name, analytics_pages.title').joins([:users])

Приведенный выше запрос не дает пользователям имя и фамилию. Другой момент заключается в том, что когда я выполняю запрос SQL, он выполняется в * 1009. * admin.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Попробуйте это

analytics_pages = AnalyticsPage.joins(:users).pluck('users.first_name,users.last_name')

В качестве альтернативы, если поля first_name и last_name однозначны, т. Е. В модели AnalyticsPage нет полей с одинаковыми именами, то следующее также должно работать

analytics_pages = AnalyticsPage.joins(:users).pluck([:first_name, :last_name])

Редактировать 1:

Если вам также необходимо извлечь данные из модели AnalyticsPages, вот способ go

analytics_pages = AnalyticsPage.joins(:users).pluck('users.first_name,users.last_name, analytics_pages.field1,analytics_pages.field2')

опять же, если поля однозначны, должно работать следующее

AnalyticsPage.joins(:users).pluck(:user_field_1, :analytics_pages_field_1)

Ключ должен думать о ModelA.joins (: model_b) как о единой таблице. в этой таблице однозначные поля являются именами, какими они были в исходных таблицах, а неоднозначные поля именуются с префиксом table_name..

Редактировать 2:

Даже select будет работать вместо pluck, разница в том, что пока select возвращает массив объектов ActiveRecord, pluck возвращает массив полей.

0 голосов
/ 19 февраля 2020

попробуй с сорвать

Pod.pluck('users.first_name, users.last_name').joins(:users)

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