Hi, I have a Person model and Company model like as follows:- Person.rb class Person <ActiveRecord::Base has_one :company end Company.rb class Company < ActiveRecord::Base end I have a function def person_details @person=Person.find(params[:id, :include=> :company) end person_details.html.erb <%=@person.name%> : <%=@person.company.name%> I read that if you use the :include option then it reduces your number of queries. Means, whenever it is firing a query to find person same time it eager loads the company association. I am confused that what exactly it does? Is it load the company object in memory? and instead of going to database it takes it from memory. Can anyone elaborate me what exactly happens when we use the :include option. Thanks, Mike -- Posted via http://www.ruby-forum.com/. -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 10 August 2010 13:44, Mike Disuza <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> > > Hi, > I have a Person model and Company model like as follows:- > > Person.rb > > class Person <ActiveRecord::Base > has_one :company > end > > Company.rb > class Company < ActiveRecord::Base > end > > I have a function > def person_details > @person=Person.find(params[:id, :include=> :company) > end > > person_details.html.erb > <%=-Q04acJWyC0R7tPAFqOLdPg@public.gmane.org%> : <%=-H7LnPrieQlnTGrgubYv983u08AWo4t0+@public.gmane.org%> > > I read that if you use the :include option then it reduces your number > of queries. > Means, whenever it is firing a query to find person same time it eager > loads the company association. > > I am confused that what exactly it does? Is it load the company object > in memory? and instead of going to database it takes it from memory.Write some code that uses your find and then accesses person.company and look in the log to see the queries being used. Repeat without the :include and you will see the difference. Colin -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Hi I have written code like this 1) Without :include My code is :- def user_details @user=User.find(params[:id]) @company=@user.company end Log Output:- Processing UsersController#user_details (for 127.0.0.1 at 2010-08-11 10:51:34) [GET] Parameters: {"id"=>"2"} User Columns (1.0ms) SHOW FIELDS FROM `users` User Load (0.4ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) Company Load (0.4ms) SELECT * FROM `companies` WHERE (`companies`.user_id = 2) LIMIT 1 Rendering template within layouts/users Rendering users/user_details Completed in 65ms (View: 48, DB: 2) | 200 OK [http://localhost/user_xml?id=2] 2) With Include:- def user_details @user=User.find(params[:id], :include=>:company) @company=@user.company end Log Output:- Processing UsersController#user_details (for 127.0.0.1 at 2010-08-11 10:53:13) [GET] Parameters: {"id"=>"2"} User Columns (1.2ms) SHOW FIELDS FROM `users` User Load (0.5ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) Company Load (0.3ms) SELECT * FROM `companies` WHERE (`companies`.user_id = 2) LIMIT 1 Rendering template within layouts/users Rendering users/user_details Completed in 13ms (View: 2, DB: 2) | 200 OK [http://localhost/user_xml?id=2] If you look at the both o/p there is a query on company table in both the cases. What is the difference? Thanks, Mike -- Posted via http://www.ruby-forum.com/. -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
The queries will likely be the same.. but you should check to see if it loaded the company details _before_ you called @user.company. You might try the following from script/console while tailing the log file in another terminal. ruby script/console => User.find(2) ... check the log/development.log => User.find(2, :include => :company) .... check log/development.log Good luck! Cheers, Robby On Tue, Aug 10, 2010 at 10:21 PM, Mike Disuza <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> Hi I have written code like this > > 1) Without :include > My code is :- > def user_details > @user=User.find(params[:id]) > @company=-ASQrhD/3864ki8xbSfFMpQ@public.gmane.org > end > Log Output:- > > Processing UsersController#user_details (for 127.0.0.1 at 2010-08-11 > 10:51:34) [GET] > Parameters: {"id"=>"2"} > User Columns (1.0ms) SHOW FIELDS FROM `users` > User Load (0.4ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) > Company Load (0.4ms) SELECT * FROM `companies` WHERE > (`companies`.user_id = 2) LIMIT 1 > Rendering template within layouts/users > Rendering users/user_details > Completed in 65ms (View: 48, DB: 2) | 200 OK > [http://localhost/user_xml?id=2] > > 2) With Include:- > def user_details > @user=User.find(params[:id], :include=>:company) > @company=-ASQrhD/3864ki8xbSfFMpQ@public.gmane.org > end > Log Output:- > Processing UsersController#user_details (for 127.0.0.1 at 2010-08-11 > 10:53:13) [GET] > Parameters: {"id"=>"2"} > User Columns (1.2ms) SHOW FIELDS FROM `users` > User Load (0.5ms) SELECT * FROM `users` WHERE (`users`.`id` = 2) > Company Load (0.3ms) SELECT * FROM `companies` WHERE > (`companies`.user_id = 2) LIMIT 1 > Rendering template within layouts/users > Rendering users/user_details > Completed in 13ms (View: 2, DB: 2) | 200 OK > [http://localhost/user_xml?id=2] > > If you look at the both o/p there is a query on company table in both > the cases. > > What is the difference? > > Thanks, > Mike > -- > Posted via http://www.ruby-forum.com/. > > -- > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.