Has_many :through, expects "through" model to be belongs_to


#1

Hi,
I’m using has_many and through relationship between two models
Profile and User
Profile.rb

has_and_belongs_to_many :users
belongs_to :community

User.rb

has_and_belongs_to_many :profiles
has_many :communities, :through=>profiles

When i try to do
@user.communities, Rails is searching for foreign key of user in profile
table, whereas profile and user have habtm relationship.
How to solve this problem?


#2

suppose if the junction model is ProfileUser You can define like

Profile.rb


has_many :profile_users
has_many :users, :through => :profile_users

User.rb


has_many :profile_users
has_many :profiles, :through => :profile_users

profile_users.rb
belongs_to :user
belongs_to :profile

Now you can access like @user.profiles Is that what u want?

Sijo


#3

You can only go through has_many associations.

Blog: http://random8.zenunit.com/
Learn rails: http://sensei.zenunit.com/

On 28/02/2009, at 4:54 PM, Preethi S.
<removed_email_address@domain.invalid


#4

Sijo Kg wrote:

suppose if the junction model is ProfileUser You can define like

Profile.rb


has_many :profile_users
has_many :users, :through => :profile_users

User.rb


has_many :profile_users
has_many :profiles, :through => :profile_users

profile_users.rb
belongs_to :user
belongs_to :profile

Now you can access like @user.profiles Is that what u want?

Sijo

Thanks for your input. I’m able to do @user.profiles, that is not
creating any problem. The problem is,
User:

has_many :profile_users
has_many :profiles, through=>:profile_users
has_many :community, through=>:profiles

where
community

has_many :profiles
has_many :users , through=>:profiles

and
profile

belongs_to :community

profiles_users

belongs_to :profile
belongs_to :user

When do @user.communities,
flow should be like this:

Join the profile and profile user table and get all the profiles that
belong to the user and, from the profiles check the community it belongs
to and then return the result(communities).

but am not getting the desired result because rails is not joining all
the tables needed, it is checking for community_id in profile_users
whereas it is in profile table.