对于单表继承,如何强制Rails为'type'列使用整数列而不是字符串?
答案 0 :(得分:1)
您可以覆盖Rails用于将表名转换为类名的方法,反之亦然:
相关方法是find_sti_class
,它负责将存储在类型列中的值转换为相应的ActiveRecord模型和sti_name
,它负责在给定ActiveRecord的情况下检索存储在类型列中的值。子类。
您可以像这样覆盖它们:
class Institution::Base < ActiveRecord::Base
ALLOWED_CLASSES = %w[Institution::NonProfit Institution::Commercial]
class << self
def find_sti_class type_name
idx = type_name.to_i
super if idx == 0
ALLOWED_CLASSES[idx-1].constantize
rescue NameError, TypeError
super
end
def sti_name
idx = ALLOWED_CLASSES.index(self.name)
if idx.nil?
super
else
idx + 1
end
end
end
end
我已经写了一篇post详细说明了这一点。
答案 1 :(得分:0)
您必须找到负责处理“类型”列的ActiveRecord部分并对其进行修补,即覆盖它在您的应用程序中的工作方式。