Logan Bailey
Logan Bailey

Reputation: 7127

Correct model relationship for a "follow" close to twitter in rails

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

Answers (1)

jrichardlai
jrichardlai

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

Related Questions