Has_many :through a belongs_to relationship

I have users who belong to a group. I also have a room that belongs to
a group. I want to use a has_many through association to link the room
and the users as such:

class Room < ActiveRecord::Base

belongs_to :group
has_many :users, :through => :group

end

The SQL generated for the search is incorrect:

SELECT users.* FROM users INNER JOIN group ON users.group_id =
groups.id WHERE (groups.group_id = 2)

The WHERE clause looks for group_id within the groups table when it
should be looking for just id. It uses groups.id in the inner join, so
I don’t understand why it is wrong in the WHERE clause. Do I need to
specify something?

Thanks in advance for any help :-).

Chris

Chris Rericha wrote:

I have users who belong to a group. I also have a room that belongs to
a group. I want to use a has_many through association to link the room
and the users as such:

class Room < ActiveRecord::Base

belongs_to :group
has_many :users, :through => :group

end

The SQL generated for the search is incorrect:

SELECT users.* FROM users INNER JOIN group ON users.group_id =
groups.id WHERE (groups.group_id = 2)

The WHERE clause looks for group_id within the groups table when it
should be looking for just id. It uses groups.id in the inner join, so
I don’t understand why it is wrong in the WHERE clause. Do I need to
specify something?

It could be that you’re trying to use has_many :through in an
“unsupported configuration”. You can do it where both belongs_to
associations are in the join model, or where just one of them is, but
you can’t do it where neither is in the join model. What do your tables
look like, and your other models?


Josh S.
http://blog.hasmanythrough.com

What I really want to do is have the room know about all of the meetings
for all of the users in the group. Here are the tables.

table Group
{
id : int

}

table User
{
id : int
group_id : int

}

table Meeting
{
id : int
user_id : int

}

table Room
{
id : int
group_id : int

}

Here are the active record associations:

class Group < ActiveRecord::Base
has_one :room
has_many :users
end

class User < ActiveRecord::Base
belongs_to :group
has_many :meetings
end

class Room < ActiveRecord::Base
belongs_to :group
has_many :users, :through => :group
has_many :meetings, :through => :users

end

If this is not the proper way to use has_many :through, is there a way
to associate users meetings with the room? Thanks for your help!

Chris

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