我正在尝试向我的网站添加“跟随”功能,但我无法找到使用多态关联的正确方法。用户需要能够遵循3个不同的类,这3个类不会跟随用户。我在过去创建了一个跟随用户的用户,但事实证明这更加困难。
我的迁移是
class CreateRelationships < ActiveRecord::Migration
def change
create_table :relationships do |t|
t.integer :follower_id
t.integer :relations_id
t.string :relations_type
t.timestamps
end
end
end
我的关系模型是
class Relationship < ActiveRecord::Base
attr_accessible :relations_id
belongs_to :relations, :polymorphic => true
has_many :followers, :class_name => "User"
end
在我的用户模型中
has_many :relationships, :foreign_key => "supporter_id", :dependent => :destroy
和其他3个模型
has_many :relationships, :as => :relations
我错过了设置此关联的内容吗?
答案 0 :(得分:5)
你基本上是正确的,除了一些小错误:
attr_accessible :relations_id
是多余的。将其从Relationship
型号中删除。
Relationship
和User
模型都会调用has_many
来相互关联。 Relationship
应调用belongs_to
,因为它包含外键。
在User
模型中,设置:foreign_key => "follower_id"
。
我会这样做。
在Follow
内容方面有一个followable
中间类,多边形关联,follower
用户端有一个has_many(用户有很多跟随)。
首先,创建一个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