# :table\_name\_with\_underscore and join models

**URL:** <https://discuss.rubyonrails.org/t/table-name-with-underscore-and-join-models/36009>\
**Category:** rubyonrails-talk\
**Created:** [November 3, 2008, 11:02pm UTC](https://discuss.rubyonrails.org/t/table-name-with-underscore-and-join-models/36009 "2008-11-03T23:02:34Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Greg\_Donald1](https://sea2.discourse-cdn.com/rubyonrails/user_avatar/discuss.rubyonrails.org/greg_donald1/32/1313_2.png) [@Greg\_Donald1](https://discuss.rubyonrails.org/u/Greg_Donald1)\
**Post date:** [November 3, 2008, 11:02pm UTC](https://discuss.rubyonrails.org/t/table-name-with-underscore-and-join-models/36009/1 "2008-11-03T23:02:34Z")

</div>

Per my PHBs, I'm using

ActiveRecord::Base.primary\_key\_prefix\_type = :table\_name\_with\_underscore

in my current project.

My problem is that this setting seems to be causing me some issues with my join model's primary keys.

For example I have these three models:

class User \< ActiveRecord::Base &nbsp;&nbsp;has\_many :user\_ugroups &nbsp;&nbsp;has\_many :ugroups, :through =\> :user\_ugroups end

class Ugroup \< ActiveRecord::Base &nbsp;&nbsp;has\_many :user\_ugroups &nbsp;&nbsp;has\_many :users, :through =\> :user\_ugroups end

class UserUgroup \< ActiveRecord::Base &nbsp;&nbsp;belongs\_to :user &nbsp;&nbsp;belongs\_to :ugroup end

My migration for the join table looks like this:

def self.up &nbsp;&nbsp;create\_table :user\_ugroups, :primary\_key =\> :user\_ugroups\_id do |t| &nbsp;&nbsp;&nbsp;&nbsp;t.integer :user\_id, :null =\> false &nbsp;&nbsp;&nbsp;&nbsp;t.integer :ugroup\_id, :null =\> false &nbsp;&nbsp;end end

So when I create a UserUgroup like so:

> > UserUgroup.create!( :user =\> @gdonald, :ugroup =\> @admin )

ActiveRecord tries to insert a NULL for the user\_ugroups\_id field and then I get this:

ActiveRecord::StatementInvalid: OCIError: ORA-01400: cannot insert NULL into ("MYPROJDB"."USER\_UGROUPS"."USER\_UGROUPS\_ID"): INSERT INTO user\_ugroups (user\_ugroups\_id, user\_id, ugroup\_id) VALUES(NULL, 1, 1)

The migration creates my USER\_UGROUPS\_SEQ without issue, but then it doesn't get used.

Any ideas?

---

<div class="post-metadata">

**Author:** ![Greg\_Donald1](https://sea2.discourse-cdn.com/rubyonrails/user_avatar/discuss.rubyonrails.org/greg_donald1/32/1313_2.png) [@Greg\_Donald1](https://discuss.rubyonrails.org/u/Greg_Donald1)\
**Post date:** [November 3, 2008, 11:13pm UTC](https://discuss.rubyonrails.org/t/table-name-with-underscore-and-join-models/36009/2 "2008-11-03T23:13:59Z")

</div>

I forgot to mention, I also tried

set\_sequence\_name "USER\_UGROUPS\_SEQ"

in my join model, but I got the same error.

---

<div class="post-metadata">

**Author:** ![Greg\_Donald1](https://sea2.discourse-cdn.com/rubyonrails/user_avatar/discuss.rubyonrails.org/greg_donald1/32/1313_2.png) [@Greg\_Donald1](https://discuss.rubyonrails.org/u/Greg_Donald1)\
**Post date:** [November 4, 2008, 4:54pm UTC](https://discuss.rubyonrails.org/t/table-name-with-underscore-and-join-models/36009/3 "2008-11-04T16:54:02Z")

</div>

For the next poor Oracle user who comes along, here's a workaround:

class UserUgroup \< ActiveRecord::Base

&nbsp;&nbsp;before\_save :get\_id

&nbsp;&nbsp;belongs\_to :ugroup &nbsp;&nbsp;belongs\_to :user

&nbsp;&nbsp;def get\_id &nbsp;&nbsp;&nbsp;&nbsp;self.user\_ugroup\_id = connection.next\_sequence\_value( self.class.sequence\_name ) &nbsp;&nbsp;end

end

---

<div class="post-metadata">

**Author:** ![Greg\_Donald1](https://sea2.discourse-cdn.com/rubyonrails/user_avatar/discuss.rubyonrails.org/greg_donald1/32/1313_2.png) [@Greg\_Donald1](https://discuss.rubyonrails.org/u/Greg_Donald1)\
**Post date:** [November 4, 2008, 4:56pm UTC](https://discuss.rubyonrails.org/t/table-name-with-underscore-and-join-models/36009/4 "2008-11-04T16:56:21Z")

</div>

Oops.. that should be before\_create
