2015-01-21 3 views
2

Если я представитьВнутренние соединения выбрать несколько столбцов

Role.select("roles.character, actors.lname AS actors_lname").joins(:actor) 

возвращает:

Role Load (0.0ms) SELECT roles.character, actors.lname AS actors_lname 
FROM "roles" INNER JOIN "actors" ON "actors"."id" = "roles"."actor_id" 
#<ActiveRecord::Relation [#<Role id: nil, character: "Ellis Boyd 'Red' Redding">, 
#<Role id: nil, character: "Andy Dufresne">, #<Role id: nil, character: "Warden Norton">]> 

Почему не делает получить отображается столбец actors.lname?

ответ

2

Использование select.

Order.select("orders.id, customers.name").joins(:customers) 

Вы можете получить соответствующие значения, если псевдоним их

orders = Order.select("orders.id, customers.name AS customer_name").joins(:customers) 

# you must call the method implicitly, or use .attributes 
orders.first.customer_name 

Пожалуйста, обратите внимание, что стоимость customer_name не будет отображаться в проверке записи. Поэтому следующий код

orders.first 

в IRB не распечатает атрибут.

+0

@SimoneCarlettie, спасибо, но, похоже, показывается только orders.id. По какой-то причине имя customer.name не отображается. Если я делаю обратное, он показывает только custers.name, а не orders.id. Любой совет? –

+0

Используйте 'AS':' select ("orders.id, customers.name AS customer_name") ', и вы сможете вызвать' customer_name' в 'Order'. –

+0

@SimoneCarlettie, я отредактировал сообщение с результатом вашего совета. Любые идеи, как я могу помочь вам помочь мне? :) –

Смежные вопросы