# Has\_many :through & \<\< & STI

**URL:** <https://www.ruby-forum.com/t/has-many-through-sti/134989>\
**Category:** Rails\
**Created:** [April 16, 2008, 9:30pm UTC](https://www.ruby-forum.com/t/has-many-through-sti/134989 "2008-04-16T21:30:31Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![BJ\_ClarkSthe\_scie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e47774/32.png) [@BJ\_ClarkSthe\_scie](https://www.ruby-forum.com/u/BJ_ClarkSthe_scie)\
**Post date:** [April 16, 2008, 9:30pm UTC](https://www.ruby-forum.com/t/has-many-through-sti/134989/1 "2008-04-16T21:30:31Z")

</div>

I’ve got a pretty crazy has\_many :through going.

My join table is set up like this:

# Table name: memberships

# 

# id :integer not null, primary key

# member\_of\_id :integer

# member\_of\_type :string(255)

# user\_id :integer

And in my User model, I’ve got:  
class User \< ActiveRecord::Base  
has\_many :memberships  
has\_many :terms, :through =\> :memberships, :source  
=\> :term, :conditions =\> “memberships.member\_of\_type = ‘Term’”

def add\_term(term)  
unless terms.exists? [“memberships.member\_of\_type = ? AND  
memberships.member\_of\_id = ?”, “Term”, term]  
terms \<\< term #Line 50  
end  
return true  
end

end

Any time I call terms \<\< term (in this method or in the console or  
whatever) I’m getting:

NoMethodError (You have a nil object when you didn’t expect it!  
The error occurred while evaluating nil.constantize):  
(eval):7:in `before_save' /vendor/rails/activerecord/lib/active_record/callbacks.rb:301:in`send’  
/vendor/rails/activerecord/lib/active\_record/callbacks.rb:301:in  
`callback' /vendor/rails/activerecord/lib/active_record/callbacks.rb:206:in`create\_or\_update’  
/vendor/rails/activerecord/lib/active\_record/base.rb:2151:in  
`save_without_validation!' /vendor/rails/activerecord/lib/active_record/validations.rb:927:in`save\_without\_dirty!’  
/vendor/rails/activerecord/lib/active\_record/dirty.rb:82:in  
`save_without_transactions!' /vendor/rails/activerecord/lib/active_record/transactions.rb: 110:in`save!’  
/vendor/rails/activerecord/lib/active\_record/connection\_adapters/  
abstract/database\_statements.rb:66:in `transaction' /vendor/rails/activerecord/lib/active_record/transactions.rb:79:in`transaction’  
/vendor/rails/activerecord/lib/active\_record/transactions.rb:98:in  
`transaction' /vendor/rails/activerecord/lib/active_record/transactions.rb: 110:in`save!’  
/vendor/rails/activerecord/lib/active\_record/transactions.rb:  
118:in `rollback_active_record_state!' /vendor/rails/activerecord/lib/active_record/transactions.rb: 110:in`save!’  
/vendor/rails/activerecord/lib/active\_record/validations.rb:898:in  
`create!' /vendor/rails/activerecord/lib/active_record/associations/ has_many_through_association.rb:60:in`\<\<’  
/vendor/rails/activerecord/lib/active\_record/base.rb:1801:in  
`with_scope' /vendor/rails/activerecord/lib/active_record/associations/ has_many_through_association.rb:60:in`send’  
/vendor/rails/activerecord/lib/active\_record/associations/  
has\_many\_through\_association.rb:60:in `<<' /vendor/rails/activerecord/lib/active_record/associations/ has_many_through_association.rb:56:in`each’  
/vendor/rails/activerecord/lib/active\_record/associations/  
has\_many\_through\_association.rb:56:in `<<' /vendor/rails/activerecord/lib/active_record/connection_adapters/ abstract/database_statements.rb:66:in`transaction’  
/vendor/rails/activerecord/lib/active\_record/transactions.rb:79:in  
`transaction' /vendor/rails/activerecord/lib/active_record/associations/ has_many_through_association.rb:55:in`\<\<’  
/app/models/user.rb:50:in `add\_term’

Anyone have any idea’s? I’m running edge rails from last week.

Thanks,  
BJ
