我的班级
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'。
答案 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
查询。我不知道它是如何生成这个查询的,但是当你定义这些范围时,你可能已经覆盖了一些东西。