在Rails 5中删除表 - 稍后添加它会抛出表已经存在的错误

时间:2018-04-22 22:00:11

标签: ruby-on-rails sqlite activerecord ruby-on-rails-5

我正在使用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并列出了表,但它并不存在。到处寻找解决方案。

1 个答案:

答案 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,这解释了这个问题。