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