我正在使用Rails 5和SQLite构建应用程序。我试图为多对多关系创建一个表,并创建一个没有'CreateModelXModelYJoinTable'的连接表,而是创建了一个带有两个外键的迁移。一旦我意识到我的错误,我通过迁移删除了表,并使用上面的语法重新创建它,但现在当我迁移时,我收到此错误:
SQLite3::SQLException: table "ingredients_recipes" already exists
以下是按顺序进行的三次违规迁移:
class CreateIngredientRecipes < ActiveRecord::Migration[5.1]
def change
create_table :ingredient_recipes do |t|
t.references :recipe, foreign_key: true
t.references :ingredient, foreign_key: true
t.timestamps
end
end
end
class DropIngredientsRecipes < ActiveRecord::Migration[5.1]
def change
drop_table :ingredient_recipes
end
end
class CreateIngredientsRecipesJoinTable < ActiveRecord::Migration[5.1]
def change
create_join_table :ingredients, :recipes
create_join_table :ingredients, :recipes do |t|
t.index :ingredient_id
t.index :recipe_id
end
end
end
非常感谢任何帮助。我检查了控制台,关联不再存在。甚至进入rails db并列出了表,但它并不存在。到处寻找解决方案。
答案 0 :(得分:0)
您的错误是create_join_table
重复两次:
您的代码:
class CreateIngredientsRecipesJoinTable < ActiveRecord::Migration[5.1]
def change
create_join_table :ingredients, :recipes
create_join_table :ingredients, :recipes do |t|
t.index :ingredient_id
t.index :recipe_id
end
end
end
应该是:
class CreateIngredientsRecipesJoinTable < ActiveRecord::Migration[5.1]
def change
create_join_table :ingredients, :recipes do |t|
t.index :ingredient_id
t.index :recipe_id
end
end
end
你可以注意到创建的Join表是ingredients_recipes
而不是ingredient_recipes
,这解释了这个问题。