Forum: Ruby on Rails has_many :through, expects "through" model to be belongs_to

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Preethi S. (Guest)
on 2009-02-28 07:54
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?
Sijo k. (Guest)
on 2009-02-28 09:16
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
Julian L. (Guest)
on 2009-02-28 09:56
(Received via mailing list)
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
Neetal S. (Guest)
on 2009-02-28 12:38
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.
This topic is locked and can not be replied to.