This's what my think. use sql log you can see more details.

2010/4/24 Will Prater <[email protected]>

> I've fixed my issues.  Should have been using joins vs includes as
> there was really no joins happening with eager loading.
>
> On Apr 23, 11:14 am, Will Prater <[email protected]> wrote:
> > Hi,
> >
> > Sure, here is the schema, and model files.  Let me know what you
> > think.  Why can't I get the :select to work when using ".includes".
> > In the console examples below, you can see the pay_rate and bill_rate
> > are not present in the example using .includes.
> >
> > Schemahttps://gist.github.com/76e70c7f31b6dcc5cfcc
> >
> > Consultant Modelhttps://gist.github.com/93e5858417bb14ec18c9
> >
> > Project Modelhttps://gist.github.com/8545e9da49742b4e4dcb
> >
> > Console output using .includes does not honor :select
> > ========================================
> > ruby-1.8.7-p249 >
> > Project.includes(:consultants).first.to_json(:include => :consultants)
> >  => "{\"start_date\":null,\"name\":\"Widget Assembly\",\"created_at\":
> > \"2010-04-22T22:52:29Z\",\"updated_at\":\"2010-04-22T22:52:29Z\",
> > \"sales_contact_id\":null,\"id\":1,\"enabled\":true,\"client_id\":
> > 1,\"consultants\":[{\"created_at\":\"2010-04-22T22:52:29Z\",
> > \"updated_at\":\"2010-04-23T02:35:58Z\",\"recruiter_contact_id\":
> > 1,\"payclass\":2,\"id\":1,\"enabled\":true,\"phone\":\"\",\"last_name
> > \":\"Wright\",\"first_name\":\"Steve\",\"email\":\"[email protected]
> > \"}],\"end_date\":null}"
> >
> > Console output using does honor :select, but uses N + 1 queries for
> > all the consultants in a project
> > ========================================
> > ruby-1.8.7-p249 > Project.first.to_json(:include => :consultants)
> >  => "{\"start_date\":null,\"name\":\"Widget Assembly\",\"created_at\":
> > \"2010-04-22T22:52:29Z\",\"updated_at\":\"2010-04-22T22:52:29Z\",
> > \"sales_contact_id\":null,\"id\":1,\"enabled\":true,\"client_id\":
> > 1,\"consultants\":[{\"start_date\":null,\"pay_rate\":\"40\",
> > \"created_at\":\"2010-04-22T22:52:29Z\",\"updated_at\":
> > \"2010-04-23T02:35:58Z\",\"recruiter_contact_id\":1,\"project_id\":
> > \"1\",\"consultants_projects_id\":\"1\",\"bill_rate\":\"80\",\"payclass
> > \":2,\"id\":1,\"enabled\":true,\"consultants_projects_enabled\":\"t\",
> > \"phone\":\"\",\"last_name\":\"Wright\",\"end_date\":null,\"first_name
> > \":\"Steve\",\"email\":\"[email protected]\"}],\"end_date\":null}"
> >
> > Any help is appreciated.  Am I doing something wrong, or is this just
> > not supported?
> >
> > -Will
> >
> > On Apr 23, 7:17 am, tommy xiao <[email protected]> wrote:
> >
> >
> >
> >
> >
> > > hi,Will
> > >     can you use gist to provide more code? it is examine your code.
> >
> > > 2010/4/23 tommy xiao <[email protected]>
> >
> > > > interest topic. in console, use to_sql to represent SQL, Maybe found
> more
> > > > hits.
> >
> > > > 2010/4/23 Will Prater <[email protected]>
> >
> > > > More observations I've found.  The Arel includes method does not seem
> > > >> to respect HMT :select joins.  I'd prefer to use the "includes"
> lazy-
> > > >> laoding way, but cannot seem to get the extra attributes to come
> back.
> >
> > > >> Both will return the Manager Model
> > > >> ====================================
> > > >> ruby-1.8.7-p249 > p = Project.first.managers.first
> > > >>  => #<Manager id: 1, first_name: "Edward", last_name:
> "Scissorhands",
> > > >> email: nil, phone: nil, created_at: "2010-04-22 22:52:29",
> updated_at:
> > > >> "2010-04-22 22:52:29">
> >
> > > >> ruby-1.8.7-p249 > p =
> Project.includes(:managers).first.managers.first
> > > >>  => #<Manager id: 1, first_name: "Edward", last_name:
> "Scissorhands",
> > > >> email: nil, phone: nil, created_at: "2010-04-22 22:52:29",
> updated_at:
> > > >> "2010-04-22 22:52:29">
> >
> > > >> Notice that all the extra attributes are NOT passed
> > > >> ===================================
> > > >> ruby-1.8.7-p249 > p =
> > > >> Project.includes(:managers).first.managers.first.to_json
> > > >>  => "{\"created_at\":\"2010-04-22T22:52:29Z\",\"updated_at\":
> > > >> \"2010-04-22T22:52:29Z\",\"id\":1,\"phone\":null,\"last_name\":
> > > >> \"Scissorhands\",\"first_name\":\"Edward\",\"email\":null}"
> >
> > > >> Notice that all the extra attributes are passed
> > > >> ===================================
> > > >> ruby-1.8.7-p249 > p = Project.first.managers.first.to_json
> > > >>  => "{\"created_at\":\"2010-04-22T22:52:29Z\",\"updated_at\":
> > > >> \"2010-04-22T22:52:29Z\",\"project_id\":\"1\",\"primary\":\"t\",
> > > >> \"manager_id\":\"1\",\"id\":1,\"phone\":null,\"last_name\":
> > > >> \"Scissorhands\",\"first_name\":\"Edward\",\"email\":null}"
> >
> > > >> Here is the setup in my Model
> > > >> ===================================
> > > >> has_many :managers_projects
> > > >> has_many :managers, :through => :managers_projects,
> > > >>  :select => 'managers.*, managers_projects.project_id,
> > > >> managers_projects.manager_id, managers_projects.`primary`'
> >
> > > >> On Apr 21, 5:00 pm, Will Prater <[email protected]> wrote:
> > > >> > Hello,
> >
> > > >> > How can one get the extra attributes from the association table
> while
> > > >> > using lazy loading like so:
> >
> > > >> > # I have a HMT (rails3) association and am using the includes
> method
> > > >> > to prepare my queries.  But Im not able to get at the extra fields
> in
> > > >> > the association table this way.
> >
> > > >> > # Schema
> > > >> >   create_table "consultants_projects", :force => true do |t|
> > > >> >     t.integer "consultant_id"
> > > >> >     t.integer "project_id"
> > > >> >     t.integer "pay_rate"
> > > >> >     t.integer "bill_rate"
> > > >> >     t.date    "start_date"
> > > >> >     t.date    "end_date"
> > > >> >     t.boolean "enabled",       :default => true
> > > >> >   end
> >
> > > >> >   add_index "consultants_projects", ["consultant_id"], :name =>
> > > >> > "index_consultants_projects_on_consultant_id"
> > > >> >   add_index "consultants_projects", ["project_id"], :name =>
> > > >> > "index_consultants_projects_on_project_id"
> >
> > > >> > # Model
> > > >> > class Project < ActiveRecord::Base
> > > >> >   has_many :managers_projects
> > > >> >   has_many :managers, :through => :managers_projects
> >
> > > >> >   # We want all the extra fields on the consultants_projects
> > > >> > association
> > > >> >   has_many :consultants_projects
> > > >> >   has_many :consultants,
> > > >> >     :through => :consultants_projects,
> > > >> >     :select => 'consultants.*, consultants.id,'+
> > > >> >                 'consultants_projects.id as
> consultants_projects_id, '
> > > >> > +
> > > >> >                 'consultants_projects.project_id,' +
> > > >> >                 'consultants_projects.pay_rate,' +
> > > >> >                 'consultants_projects.pay_rate,' +
> > > >> >                 'consultants_projects.bill_rate,' +
> > > >> >                 'consultants_projects.start_date,' +
> > > >> >                 'consultants_projects.end_date,' +
> > > >> >                 'consultants_projects.enabled AS
> > > >> > consultants_projects_enabled'
> >
> > > >> > end
> >
> > > >> > # c = Consultant.includes(:projects)
> > > >> > # c.first.projects
> > > >> > #
> > > >> > # Does not include the extra fields like pay_rate, bill_rate etc
> that
> > > >> > are stored in the association table.
> >
> > > >> > --
> > > >> > 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
> [email protected].
> > > >> > To unsubscribe from this group, send email to
> > > >> [email protected]<rubyonrails-talk%[email protected]><rubyonrails-talk%2Bunsubscrib
> [email protected]>
> > > >> .
> > > >> > For more options, visit this group athttp://
> > > >> 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
> [email protected].
> > > >> To unsubscribe from this group, send email to
> > > >> [email protected]<rubyonrails-talk%[email protected]><rubyonrails-talk%2Bunsubscrib
> [email protected]>
> > > >> .
> > > >> For more options, visit this group at
> > > >>http://groups.google.com/group/rubyonrails-talk?hl=en.
> >
> > > > --
> > > > tommy xiao
> > > > E-mail: xiaods(AT)gmail.com
> >
> > > --
> > > tommy xiao
> > > E-mail: xiaods(AT)gmail.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 [email protected]
> .
> > > To unsubscribe from this group, send email to
> [email protected]<rubyonrails-talk%[email protected]>
> .
> > > For more options, visit this group athttp://
> 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 [email protected].
> > To unsubscribe from this group, send email to
> [email protected]<rubyonrails-talk%[email protected]>
> .
> > For more options, visit this group athttp://
> 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 [email protected].
> To unsubscribe from this group, send email to
> [email protected]<rubyonrails-talk%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>


-- 
tommy xiao
E-mail: xiaods(AT)gmail.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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to