与继承模型的多态关系

时间:2014-12-18 15:28:52

标签: ruby-on-rails inheritance polymorphic-associations

我在我的一个任务中使用了多态关系,继承了像

这样的模型
Class Organization < ActiveRecord::Base
end

Class Company < Organization
  has_many :roles, as: :authorizable
end

Class User < ActiveRecord::Base
  has_many :roles, as: :authorizable
end

Class Role < ActiveRecord::Base
  belongs_to :authorizable, :polymorphic => true
end

当我尝试抓取User.find(user_id).roles时,它会给我正确的结果;但是,当我尝试像Company.find(company_id).roles那样进行查询时,它会像查询

一样给我空白数组
SELECT * FROM `roles` WHERE (`roles`.authorizable_id = 5 AND `roles`.authorizable_type = 'Organization')

它应该像'authorizable_type&#39; =&#39;公司&#39;

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为你做错了什么。代码似乎使用单表继承。 Organization及其子类共享相同的数据库表,但由type列的值区分(对于Companytype将为"Company")。

在与单表继承的多态关系中,authorizable_type将始终是父模型的名称("Organization")。

请参阅here