我即将在我的Rails 2.3应用程序中使用STI。
我用以下方式对其进行了建模:
基类:
class Tariff < ActiveRecord::Base
def self.inherited(child)
child.instance_eval do
def model_name
Tariff.model_name
end
end
super
end
def self.select_options
descendants.map { |c| c.to_s }.sort
end
end
其子类:
class FlatRateTariff < Tariff
end
class TimeOfUseTariff < Tariff
has_many :tariffing_periods, :dependent => :destroy
accepts_nested_attributes_for :tariffing_periods, :allow_destroy => true
end
当我尝试创建 form_for:关税时,我正在为关税获得未定义的方法`tariffing_periods'。我该如何对这种情况进行建模?我应该在父类上放置has_many关联吗?
答案 0 :(得分:0)
STI通常在Rails中完成:
class Tariff < ActiveRecord::Base
end
class FlatRateTariff < Tariff
end
class TimeOfUseTariff < Tariff
end
确保“关税”表格具有属性type:string
- 这就是ActiveRecord存储类名称的位置
您不需要:(而是可以检查 .class )
def self.inherited(child)
child.instance_eval do
def model_name
Tariff.model_name
end
end
super
end
这里有更多信息:
第373页,使用Rails进行Agile Web开发,第3版