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.
on 2012-12-01 16:39
on 2012-12-01 16:45
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
on 2012-12-11 18:09
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 2012-12-11 18:15
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
Log in with Google account | Log in with Yahoo account
No account? Register here.