Rails数据库模型不更新

时间:2017-04-05 15:57:03

标签: ruby-on-rails database model ruby-on-rails-5 database-migration

我正在为名为SimutronX的优化机器创建数据库模型。我刚刚更改了其中一个数据库键的变量名并添加了一个索引。

当前迁移文件:

class CreateSimutronXes < ActiveRecord::Migration[5.0]
  def change
    create_table :simutron_xes do |t|
      t.integer :num_constraints
      t.integer :num_coefficients
      t.boolean :max
      t.decimal :obj_func

      t.timestamps
    end
    add_index :simutron_xes, [:user_id, :created_at]
  end
end

旧迁移文件:

class CreateSimutronXes < ActiveRecord::Migration[5.0]
  def change
    create_table :simutron_xes do |t|
      t.integer :num_constraints
      t.integer :num_coefficients
      t.boolean :min_max
      t.decimal :obj_func

      t.timestamps
    end
  end
end

我已保存新文件并运行已成功完成的rails db:migrate。运行迁移后,我将其放入rails控制台沙箱中以测试模型。

brotherlongtail:~/workspace/Simutronix (master) $ rails console --sandbox
Running via Spring preloader in process 8135
Loading development environment in sandbox (Rails 5.0.2)
Any modifications you make will be rolled back on exit
>> SimutronX.new
=> #<SimutronX id: nil, constraint: nil, coefficient: nil, min_max: nil, obj_func: nil, created_at: nil, updated_at: nil>

该模型似乎没有更新。使模型正确更新所需的其他步骤是什么?

1 个答案:

答案 0 :(得分:2)

运行后更改原始迁移无效。在特定迁移之前,您必须使用rake db:rollback回滚到该版本。然而,当我开始从db中删除表并创建一个新的迁移并运行它时,我发现它更容易。

Rails会跟踪表schema_migrations中已运行的迁移,因此一种解决方案也是删除与您要更改的迁移相对应的行。然而,这不是一个非常优雅的解决方案。