Reputation: 7127
I have schema that looks like this:
create_table "users", :force => true do |t|
t.string "email",
t.string "username"
end
create_table "followed_users", :force => true do |t|
t.integer "followed_user_id"
t.integer "followed_by_user_id"
end
Classes
class User < ActiveRecord::Base
has_many :followed_user, :foreign_key => :followed_user_id
has_many :followed_by_users, :through => :followed_user
has_many :followed_user, :foreign_key => :followed_by_user_id
has_many :followed_users, :through => :followed_user
class FollowedUser < ActiveRecord::Base
belongs_to :followed_user, :class_name => "User"
belongs_to :followed_user, :class_name => "User"
end
This solution is clearly not working for me. I was wondering if there was a better solution for this relationship.
Upvotes: 0
Views: 567
Reputation: 3357
you can not have 2 associations with the same name, I think you should rename the fields of your relation table it's a little ambiguous maybe (follower_user_id and followed_user_id ?) :
class User < ActiveRecord::Base
has_many :followed_users, :foreign_key => :followed_user_id
has_many :followed_by_users, :through => :followed_users
has_many :reverse_followed_users, :class_name => 'FollowedUser', :foreign_key => :followed_by_user_id
has_many :users_followed, :through => :reverse_followed_users, :source => :followed_user
end
class FollowedUser < ActiveRecord::Base
belongs_to :followed_user, :class_name => "User"
belongs_to :followed_by_user, :class_name => "User"
end
I hope it would help.
Upvotes: 2