Re: [Rails] Active Record Query to select associated model values.

582 views
Skip to first unread message

Colin Law

unread,
Dec 1, 2012, 10:43:16 AM12/1/12
to rubyonra...@googlegroups.com
On 1 December 2012 14:08, sakthivel sekar <sakthive...@gmail.com> wrote:
> 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').

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

sakthivel sekar

unread,
Dec 11, 2012, 12:08:31 PM12/11/12
to rubyonra...@googlegroups.com
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. 


On Saturday, December 1, 2012 7:38:50 PM UTC+5:30, sakthivel sekar wrote:
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.

Colin Law

unread,
Dec 11, 2012, 12:13:28 PM12/11/12
to rubyonra...@googlegroups.com
On 11 December 2012 17:08, sakthivel sekar <sakthive...@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

>
>
> On Saturday, December 1, 2012 7:38:50 PM UTC+5:30, sakthivel sekar wrote:
>>
>> 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.
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonra...@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-ta...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/rubyonrails-talk/-/G1nZqYErdJgJ.
>
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
Reply all
Reply to author
Forward
0 new messages