ActiveRecord :: SubclassNotFound,无论我选择什么列名

时间:2015-11-27 21:23:01

标签: ruby-on-rails inheritance activerecord single-table-inheritance

我的班级

class User < ActiveRecord::Base

  self.inheritance_column = :user_type
  scope :customers, -> { where(user_type: '1') }
  scope :freight_forwarders, -> { where(user_type: '2') }
end

class FreightForwarder < User

  has_many :quotes, foreign_key: "ff_id"

end

class Customer < User

  has_many :quotes, foreign_key: "ff_id"

end

[1]当我尝试调用User.customers

时,我收到以下错误
  

ActiveRecord :: SubclassNotFound:单表继承机制   找不到子类:'1'。提出此错误是因为   列'user_type'保留用于存储类的情况   遗产。如果您不打算将此列重命名,请重命名   用于存储继承类或覆盖   User.inheritance_column使用另一列来获取该信息。

[2]当我尝试调用Customer.all时,查询运行如下,

SELECT "users".* FROM "users" WHERE "users"."user_type" IN (0)

我无法理解它为什么'0'应该是'1'。

1 个答案:

答案 0 :(得分:1)

完整的STI类名称存储在user_type列中,而不是'0''1'。查看find_sti_class class method.

此方法尝试查找名为1

的类
  

单表继承机制无法找到子类:   '1'。

将范围更改为

  scope :customers, -> { where(user_type: 'Customer') }
  scope :freight_forwarders, -> { where(user_type: 'FreightForwarder') }

至于Customer.all查询。我不知道它是如何生成这个查询的,但是当你定义这些范围时,你可能已经覆盖了一些东西。