ruby-on-rails - 在同一类中,多态多到多

  显示原文与译文双语对照的内容
0 0

我拥有用户,标签和关系模型

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
时间:原作者:4个回答

0 0

在你的关联中添加class_name选项,如:

has_many :followers, :as => :followable, class_name:"Relationship"

你需要添加这个,因为默认情况下,Rails 查找关联名称的匹配模型 name(singular) 。

如果你不想使用 :class_name,那么你需要将 Relationship 模型的名称改为 Follower

原作者:
0 0

尝试下面的代码( 我不知道wheither会工作还是不工作):

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

但是我强烈建议使用单表继承( ) 来代替。 当然,如果希望优化数据库模式,只需显示你想要的关系。

原作者:
...