Forum: Ruby on Rails Active Record Query to select associated model values.

Posted by sakthivel sekar (Guest)
on 2012-12-01 16:39
(Received via mailing list)
Hi,
 I have two models named Customer and Order.

Customer < ActiveRecord::Base
has_many :orders
end

Order < ActiveRecord::Base
belongs_to :customer
end

Customer model has attributes like first_name and last_name. Order has
customer_id along with other attributes.

Now, I want Customer first_name for specific order. I can get it with
following query.

Customer.joins(:orders).where('orders.id = 1').select('first_name').

But, how to get it along with attributes of order table also. Say, I 
want
both customers first_name and orders table created_at value.
When I try,
Order.includes(:customer).select('orders.created_at, 
customers.first_name')
this returns only order table records. What is the best way to select
attributes of joined tables also with Active Record Query.

Thanks.
Posted by Colin Law (Guest)
on 2012-12-01 16:45
(Received via mailing list)
On 1 December 2012 14:08, sakthivel sekar <sakthivelsekar33@gmail.com> 
wrote:
>
> Customer model has attributes like first_name and last_name. Order has
> customer_id along with other attributes.
>
> Now, I want Customer first_name for specific order. I can get it with
> following query.
>
> Customer.joins(:orders).where('orders.id = 1').select('first_name').

You are missing the fundamental nature of ActiveRecord associations.
If you have an order in, for example, @order then the customer is
@order.customer and if you want that customer's first_name then you
can say @order.customer.first_name.  There is no need to mess about
with complex queries, such is the magic of Rails.

>
> But, how to get it along with attributes of order table also. Say, I want
> both customers first_name and orders table created_at value.
> When I try,
> Order.includes(:customer).select('orders.created_at, customers.first_name')
> this returns only order table records. What is the best way to select
> attributes of joined tables also with Active Record Query.

Have a look at the Rails Guide on ActiveRecord Associations (and the
other guides for that matter) and work right through a good tutorial
such as railstutorial.org (which is free to use online) and you will
be able to answer most of these questions yourself.

Colin
Posted by sakthivel sekar (Guest)
on 2012-12-11 18:09
(Received via mailing list)
Colin,
 Thanks for the reply. Yes, association makes this better and easy way. 
But
I'm expecting a way apart from using association. I heard *merge* will 
do
this, but I'm not sure.
Posted by Colin Law (Guest)
on 2012-12-11 18:15
(Received via mailing list)
On 11 December 2012 17:08, sakthivel sekar <sakthivelsekar33@gmail.com> 
wrote:
> Colin,
>  Thanks for the reply. Yes, association makes this better and easy way. But
> I'm expecting a way apart from using association. I heard merge will do
> this, but I'm not sure.

Why do you want to do it a way other than (as you say) the easiest?

Colin
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.