How to select attributes on :join?

when I use a quart joins on Roles and Profiles models

Role.joins(:profiles).where(‘profiles.profilable_type’ => “Admin”)

I get the following generated sql
SELECT roles.* FROM roles INNER JOIN profiles_roles ON
profiles_roles.role_id = roles.id INNER JOIN profiles ON
profiles.id = profiles_roles.profile_id WHERE
profiles.profilable_type = ‘Admin’

which gives me all roles attributes only

I should I write my Rails query to get all attributes ?

SELECT roles., profiles. FROM roles INNER JOIN
profiles_roles ON profiles_roles.role_id = roles.id INNER
JOIN profiles ON profiles.id = profiles_roles.profile_id
WHERE profiles.profilable_type = ‘Admin’

in this case, I’ll have 2 attributes with same name in both tables
( :id and :name ) is there any way to avoid such collision ( using
AS …)

======
class Role < ActiveRecord::Base
has_and_belongs_to_many :profiles, :join_table => :profiles_roles

On 16 January 2012 15:54, Erwin [email protected] wrote:

which gives me all roles attributes only
AS …)

======
class Role < ActiveRecord::Base
has_and_belongs_to_many :profiles, :join_table => :profiles_roles

If you get the profiles using something like
profiles = Profile.where( profileable_type => “Admin”)
then for each profile in the collection you can do profile.roles to
get all the roles for that profile.

Alternatively use :includes( :profiles ) rather than join and specify
a where for the the profilable type which will give you a collection
of Roles.

Colin

On 16 ene, 16:54, Erwin [email protected] wrote:

which gives me all roles attributes only
AS …)

======
class Role < ActiveRecord::Base
has_and_belongs_to_many :profiles, :join_table => :profiles_roles

If for some reason you need the results of the join, you can do:

Role.joins(:profiles).where(‘profiles.profilable_type’ =>
“Admin”).select(‘profiles.id, roles.id, profiles.name, profiles.id as
p_id’) # you can use the sql ‘as’ in the string

Keep in mind this will return an ActiveRecord::Relation instance, not
a set of Role or Profile, so if your plan is to iterate through
results, you better do it as Collin instructed

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs