Я хочу получить Person (self) и его history сразу. History имеет много полей, поэтому я хочу получить только некоторые столбцы, как я могу этого добиться?

where_clause = "1=1" # irrelevent query

self.where(reference: 12345)
    .includes(:history)
      # .select(:history_name, :history_key)
      .where(where_clause)
      .references(:history)
0
Patrick Ferreira 6 Сен 2016 в 12:10

3 ответа

Лучший ответ

Привет, вы используете includes для активной загрузки записей, но это не требуется здесь, потому что вы напрямую выбираете значения. Предложение select не работает с includes, вы можете использовать joins как

Person.joins(:history).select(:history_name, :history_key).where(where_clause)
1
Vishal JAIN 6 Сен 2016 в 09:17
select('history.field_name1',  'history.field_name2')
0
gmrash 6 Сен 2016 в 09:15

Вы можете использовать их так

self.where(reference: 12345)
  .includes(:history)
  .select(history: { :history_name, :history_key })
  .where(where_clause)
  .references(:history)
1
Deepak Mahakale 6 Сен 2016 в 09:17