I currently try to switch a rails 3.2 app to rails 4.0. But I have one problem with a has_and_belongs_many
model.
I have created a test app and I have the same problem there. This is what I have done:
Created two models: foo_clip and foo_url
class FooClip < ActiveRecord::Base has_and_belongs_to_many :foo_urls attr_accessible :id, :name end class FooUrl < ActiveRecord::Base has_and_belongs_to_many :foo_clips attr_accessible :url end
After this I have updated the migration files:
class CreateFooClips < ActiveRecord::Migration def change create_table :foo_clips do |t| t.string :name t.timestamps end end end class CreateFooUrls < ActiveRecord::Migration def change create_table :foo_urls do |t| t.string :url t.timestamps end end end
Now I have created the migration file for the has_and_belongs_to_many table
class CreateFooClipsFooUrls < ActiveRecord::Migration def change create_table :foo_clips_foo_urls do |t| t.belongs_to :foo_url t.belongs_to :foo_clip end end end
As last step I created a seed file for testing:
foourl1 = FooUrl.create!(:url => 'http://www.google.com') foourl2 = FooUrl.create!(:url => 'http://www.apple.com') fooclip1 = FooClip.create!(:name => 'TestClip1') fooclip1.foo_urls << foourl1 fooclip1.foo_urls << foourl2 fooclip1.save
Now I did:
rake db:drop rake db:create rake db:migrate rake db:seed
And got this error:
PG::UndefinedTable: ERROR: relation "foo_clips_urls" does not exist LINE 5: WHERE a.attrelid = '"foo_clips_urls"'::regcla... ^ : SELECT a.attname, format_type(a.atttypid, a.atttypmod), pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"foo_clips_urls"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum
If I take a look at the postgres database the table is called: foo_clips_foo_urls
Any ideas why this happens?
I fixed the problem by adding the join_table name to every model like:
has_and_belongs_to_many :foo_urls, :join_table => :foo_clips_foo_urls
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With