Корректная модель отношений для «подписки» рядом с твиттером в рельсах - PullRequest
0 голосов
/ 17 февраля 2011

У меня есть схема, которая выглядит следующим образом:

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

Классы

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

Это решение явно не работает для меня. Мне было интересно, есть ли лучшее решение для этих отношений.

1 Ответ

2 голосов
/ 17 февраля 2011

у вас не может быть двух ассоциаций с одним и тем же именем, я думаю, вам следует переименовать поля таблицы отношений, возможно, это немного двусмысленно (follower_user_id и follow_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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...