单表继承子类不存在

时间:2013-03-15 23:17:40

标签: ruby-on-rails

我正在尝试使用关联表以及单表继承('STI')。我有男人,女人和关系模型。 Relationship模型有一个类型列,因此我可以使用STI。我还创建了一个继承自Relationship的Friend模型,因为Friend将是一种关系。

Man.rb

   attr_accessible :name
   has_many :relationships
   has_many :women, :through => :relationships

Woman.rb

attr_accessible :name
has_many :relationships
has_many :men,  :through => :relationships

在聚会模型中,我还希望跟踪日期的发生时间和地点。

Relationship.rb

   attr_accessible :type
   belongs_to :woman
   belongs_to :man

Friend.rb

class Friend < Relationship

end

但是,当我尝试与类型friend创建关系时,我收到子类不存在的警告消息。在控制台中,我正在做这个

     sarah = Woman.create!(name: 'Sarah')
     jim = Man.create!(name: 'Jim')

     jim.relationships.build(type: 'Friend', woman_id: 1)
=> #<Relationship id: nil, type: "Friend", man_id: 1, woman_id: 1, created_at: nil, updated_at: nil>

     jim.save!

但是当我尝试拉出jim的关系时,我得到了

>> jim.relationships
  Relationship Load (0.3ms)  SELECT "relationships".* FROM "relationships" WHERE "relationships"."man_id" = 1
ActiveRecord::SubclassNotFound: The single-table inheritance mechanism failed to locate the subclass: 'friends'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite Relationship.inheritance_column to use another column for that information.

当我尝试与'朋友'而不是'朋友'建立关系时,情况也是如此

 jim.relationships.build(type: 'friends', woman_id: 1)

你能解释一下我做错了什么吗?

我没有在db中为朋友创建一个表。我以为一切都可以存储在关系模型中。由于这只是一个游戏应用程序,我只为关系模型分配了type属性。

1 个答案:

答案 0 :(得分:0)

我认为类型值必须是小写和单数 - friend

但实际上你可能想要使用这些对象并让rails为你处理

sarah = Woman.create!(name: 'Sarah')
jim = Man.create!(name: 'Jim')
Friend.create!(women: sarah, man: jim)

男人女人模特对我没有意义 - 他们既是一个人,一个人的关系应该只有两个人,不分性别