【问题标题】:Migration in Rails gives back could not find table errorRails 中的迁移返回找不到表错误
【发布时间】:2019-06-17 23:27:45
【问题描述】:

我进行了新的迁移,以便在我的 Ingredients Active Record 中添加 price 列。尽管如此,当我运行 rails db:migrate 时,我收到一条错误消息,指出表成分不存在。这是我的控制台命令:

 C:\Users\andri\Desktop\hoagieShop\hoagieShop>rails generate migration 
 AddPriceToIngredients price:decimal, false:null --force
  invoke  active_record
  remove    db/migrate/20190124075954_add_price_to_ingredients.rb
  create    db/migrate/20190124080657_add_price_to_ingredients.rb

C:\Users\andri\Desktop\hoagieShop\hoagieShop>rails db:migrate
== 20190123201200 RemovePriceFromIngrendients: migrating 
======================
-- remove_column(:ingrendients, :price, :decimal)
rails aborted!
StandardError: An error has occurred, this and all later migrations 
canceled:
Could not find table ingrendients 
C:/Users/andri/Desktop/hoagieShop/hoagieShop/db/migrate/201901232 
01200_remove_price_from_ingrendients.rb:3:in change
bin/rails:4:in require
bin/rails:4:in <main>

Caused by:
ActiveRecord::StatementInvalid: Could not find table ingrendients


C:/Users/andri/Desktop/hoagieShop/hoagieShop/db/migrate/20190123201200_
remove_pr 
ice_from_ingrendients.rb:3:in change
bin/rails:4:in require
bin/rails:4:in <main>
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

我已经删除并再次添加了这个迁移几次,所以我不确定这是否起到任何作用。 有谁知道为什么会发生这种情况?感谢您的帮助!

【问题讨论】:

  • 有迁移 20190123201200 应该从表 (ingrendients) 中删除特定列 (price)。但是整张桌子不存在——Could not find table ingrendients。你到底有什么不清楚的地方?
  • @spickermann 但我输入的是 AddPriceToIngrendients 而不是 AddPriceToIngrendients。
  • @spickermann 我接下来要做的是 rails db:migrate ,您看到的其余命令都是自动生成的。
  • @spickermann 我接下来要做的是 rails db:migrate ,您看到的其余命令都是自动生成的。

标签: ruby ruby-on-rails-3 activerecord migration


【解决方案1】:

这似乎是您的 20190123201200_remove_price_from_ingrendients.rb 迁移中的一个简单错字,而不是您生成的迁移,请参阅:

-- remove_column(:ingrendients, :price, :decimal)

应该是ingredients而不是ingrendientsdients之前的额外n

【讨论】:

  • 这不是我自己输入的。我首先输入 rails generate migration AddPriceToIngredients price:decimal, false:null --force 然后 rails db:migrate 其余命令作为错误
  • @ffblord 错误不是来自您刚刚创建的AddPriceToIngredients 迁移,而是来自昨天创建的包含在20190123201200_remove_price_from_ingrendients.rb 中的迁移。当您运行rails db:migrate 时,它会按照它们被创建的顺序(或者更确切地说,文件名上的时间戳)运行所有迁移,从它成功运行的最后一个之后的那个开始。因此,您似乎从昨天开始进行迁移,它试图运行以前没有运行过,这就是引发错误的原因。
  • 这是正确答案。看起来可能创建了一些迁移然后没有运行,并且可能也手动删除了迁移文件。这将导致 OP 看到的行为。
猜你喜欢
  • 1970-01-01
  • 2022-10-21
  • 2021-02-19
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 2020-09-14
  • 2021-09-24
  • 2021-07-03
相关资源
最近更新 更多