比方说,我有一个类,如:动态实例化Rails嵌套STI子类?
class Basket < ActiveRecord::Base
has_many :fruits
其中“水果”是具有像“苹果”,“桔子”等子类的STI基类...
我想能够有一个setter方法在篮状:
def fruits=(params)
unless params.nil?
params.each_pair do |fruit_type, fruit_data|
fruit_type.build(fruit_data)
end
end
end
但是,很明显,我得到这样一个例外:
NoMethodError (undefined method `build' for "apples":String)
我认为作品像这样的解决方法:
def fruits=(params)
unless params.nil?
params.each_pair do |fruit_type, fruit_data|
"#{fruit_type}".create(fruit_data.merge({:basket_id => self.id}))
end
end
end
但是,这导致水果STI对象篮下上课前被实例化,所以basket_id密钥永远不会保存在水果子类(因为basket_id没有按” t存在)。
我完全难住。有人有主意吗?
这适用于我的目的。但是,如果我正确理解这一点,这意味着我可能对我的STI子类有任何回调将无法运行,对吗? – 2010-11-04 23:36:59
不幸的是,是的。虽然看到我编辑的答案。 – zetetic 2010-11-05 00:09:41
太棒了!非常感谢! – 2010-11-05 01:20:39