当您尝试急切加载不存在的关联时,ActiveRecord会给您一个有趣的错误。它看起来像这样:
ActiveRecord::ConfigurationError: Association named 'secondary_complaint' was not found; perhaps you misspelled it?
现在为什么有人想要预先加载一个不存在的关联?看看这个。
class Bitchy < ActiveRecord::Base
has_one :primary_complaint, :as => :whiny_bitch, :class_name => 'Complaint', :conditions => {:complaint_type => 'primary'}
has_one :secondary_complaint, :as => :whiny_bitch, :class_name => 'Complaint', :conditions => {:complaint_type => 'secondary'}
has_one :life, :as => :humanoid
end
class Whiny < ActiveRecord::Base
has_one :primary_complaint, :as => :whiny_bitch, :class_name => 'Complaint', :conditions => {:complaint_type => 'primary'}
has_one :life, :as => :humanoid
end
class Complaint < ActiveRecord::Base
belongs_to :whiny_bitch, :polymorphic => true
end
class Life < ActiveRecord::Base
belongs_to :humanoid, :polymorphic => true
end
# And here's the eager-loading part:
Life.all(:include => {:humanoid => [:primary_complaint, :secondary_complaint]})
上面的代码有一些有趣的特点。如果您只有Bitchy
作为人形生物 - 它实际上会起作用。但是,只要出现一个Whiny
,您就会遇到麻烦。 ActiveRecord开始抱怨我上面写的错误 - 找不到名为'secondary_complaint'的关联。你明白为什么,对吗?因为不是每个人形机器人都有secondary_complaint。
当我试图加载多态关联时,是否有办法让ActiveRecord停止婊子和抱怨,这些关联可能会或可能不会附加某些has_one关联?
答案 0 :(得分:0)
我知道这可能仅仅是为了您的示例,但您可以将其更改为has_many :complaints
,以便它们具有相同的关联,然后从中拉出主要或次要类型。