Rails 4迁移:has_and_belongs_to_many表名

我目前尝试将rails 3.2应用程序切换到rails 4.0。 但是我对has_and_belongs_many模型有一个问题。

我创建了一个测试应用程序,我遇到了同样的问题。 这就是我所做的:

创建了两个模型:foo_clip和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 

在此之后,我更新了迁移文件:

 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 

现在我已经为has_and_belongs_to_many表创建了迁移文件

 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 

在最后一步,我创建了一个用于测试的种子文件:

 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 

现在我做了:

 rake db:drop rake db:create rake db:migrate rake db:seed 

并得到这个错误:

 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 

如果我看一下postgres数据库,就会调用该表:foo_clips_foo_urls

任何想法为什么会这样?

我通过将join_table名称添加到每个模型来修复问题,例如:

 has_and_belongs_to_many :foo_urls, :join_table => :foo_clips_foo_urls