我有用户,标记和关系模型
class User < ActiveRecord::Base
has_many :followers, :as => :followable
has_many :follows, class_name: "Relationship", :foreign_key => :follower_id
end
class Tag < ActiveRecord::Base
has_many :followers, :as => :followable
end
class Relationship < ActiveRecord::Base
belongs_to :followable, polymorphic: true
belongs_to :follower, :class_name => "User"
end
用户可以关注其他用户或标签。我想访问标签和用户的关注者,还可以找出用户关注的用户/标签。
我目前收到以下错误:
2.1.1 :003 > user.followers
NameError: uninitialized constant User::Follower
2.1.1 :005 > tag.followers
NameError: uninitialized constant Tag::Follower
答案 0 :(得分:0)
在您的关联中添加class_name选项,如:
has_many :followers, :as => :followable, class_name: "Relationship"
您需要添加此项,因为默认情况下,rails会为您的关联名称查找匹配的模型名称(单数)。
如果您不想使用:class_name
,则需要将Relationship
模型的名称更改为Follower
。
答案 1 :(得分:0)
尝试以下代码(我不知道它是否有效):
class User < ActiveRecord::Base
has_many :relationships, as: followable
has_many :followers, through: relationships, class_name: :User
end
class Tag < ActiveRecord::Base
has_many :relationships, as: followable
has_many :followers, through: relationships, class_name: :Tag
end
class Relationship < ActiveRecord::Base
belongs_to :followable, polymorphic: true
end
和Relationship
架构:
t.integer :followable_id
t.string :followable_type
但我强烈建议使用Single Table Inheritance代替。当然,如果您希望优化数据库模式,只需显示您想要的关系。