Вы в основном правильно, за исключением нескольких незначительных ошибок:
attr_accessible :relations_id
является избыточным.Удалите его из вашей Relationship
модели.
Обе модели Relationship
и User
вызывают has_many
для связи друг с другом.Relationship
должен вызывать belongs_to
, поскольку он содержит внешний ключ.
В вашей модели User
установите :foreign_key => "follower_id"
.
Вот как я бы это сделал.
Иметь средний класс Follow
с полиморфной ассоциацией на стороне контента followable
и has_many на стороне пользователя follower
(у пользователя много подписчиков).
Сначала создайте таблицу follows
:
class CreateFollows < ActiveRecord::Migration
def change
create_table :follows do |t|
t.integer :follower_id
t.references :followable, :polymorphic => true
t.timestamps
end
end
end
Замените Relationship
модель моделью Follow
:
class Follow < ActiveRecord::Base
belongs_to :followable, :polymorphic => true
belongs_to :followers, :class_name => "User"
end
Включить в User
модель:
has_many :follows, :foreign_key => :follower_id
Включите в свои три следующих класса:
has_many :follows, :as => :followable
Теперь вы можете сделать это:
TheContent.follows # => [Follow,...] # Useful for counting "N followers"
User.follows # => [Follow,...]
Follow.follower # => User
Follow.followable # => TheContent