我正在使用 STI(正确,我保证!)作为对象的一个关系:
class Walrus < ActiveRecord::Base
has_one :bubbles
end
class Bubbles < ActiveRecord::Base
belongs_to :walrus
before_save :set_origin
private
def set_origin
self.type = walrus.state ? "Bubbles::#{walrus.state}" : 'Bubbles'
end
end
class Bubbles::OfMind < Bubbles
def tango
end
end
现在,如果我建立一个新关系,则该类设置不正确:
harold = Walrus.new(state: 'OfMind')
harold.build_bubbles.save!
harold.bubbles
# => returns instance of Bubbles, not Bubbles::OfMind
harold.bubbles.tango
# NoMethodError
Bubbles 对象不能神奇地变成 Bubbles::OfMind,但在关系类型正确之前,不存在正确的功能。