Hi, I have the following setup: class Item < ActiveRecord::Base belongs_to :item, :polymorphic => true end class AbstractItem < ActiveRecord::Base has_one :item, :as => :item def self.abstract_class?; self == AbstractItem; end end class Post < AbstractItem end Now, when I do a post = Post.find :first, :include => :item inside my controller, post.item will be nil. I can do post = Post.find :first and then post.item will work, but it uses a second query. But if I don't use AbstractItem and use Post as follow: class Post < ActiveRecord::Base has_one :item, :as => :item end Then post = Post.find :first, :include => :item will work just fine, takes one query, nada problems. The reason I would like an abstract model is because there will be a lot of identical functionality within all the item types. So, what's the reason eager loading doesn't work with abstract models. How can I solve this and/or is there another/better way to solve this.
on 2007-05-26 01:18
on 2007-05-26 03:48
Have you considered using Single Table Inheritance (STI) to implement this? With STI you can persist your objects in only one table, and use the inheritance to keep your classes DRY. On May 25, 5:18 pm, Dax H. <email@example.com>
on 2007-05-29 19:09
Yes, but the sub types will be very different, STI won't be a nice option here. I saw a different approach using a module and include that one in the models, haven't tried it yet. But still, it's just weird that it doesn't work as expected, and I can't see any reason why not.