# AR: abstract model and eager loading

**URL:** <https://www.ruby-forum.com/t/ar-abstract-model-and-eager-loading/105124>\
**Category:** Rails\
**Created:** [May 25, 2007, 11:18pm UTC](https://www.ruby-forum.com/t/ar-abstract-model-and-eager-loading/105124 "2007-05-25T23:18:22Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![daxhuiberts](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/977dab/32.png) [@daxhuiberts](https://www.ruby-forum.com/u/daxhuiberts)\
**Post date:** [May 25, 2007, 11:18pm UTC](https://www.ruby-forum.com/t/ar-abstract-model-and-eager-loading/105124/1 "2007-05-25T23:18:22Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![daxhuiberts](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/977dab/32.png) [@daxhuiberts](https://www.ruby-forum.com/u/daxhuiberts)\
**Post date:** [May 26, 2007, 1:48am UTC](https://www.ruby-forum.com/t/ar-abstract-model-and-eager-loading/105124/2 "2007-05-26T01:48:02Z")

</div>

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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![daxhuiberts](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/977dab/32.png) [@daxhuiberts](https://www.ruby-forum.com/u/daxhuiberts)\
**Post date:** [May 29, 2007, 5:09pm UTC](https://www.ruby-forum.com/t/ar-abstract-model-and-eager-loading/105124/3 "2007-05-29T17:09:40Z")

</div>

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.
