【问题标题】:How the migration updates a model in Rails3.0迁移如何更新 Rails3.0 中的模型
【发布时间】:2012-10-18 22:16:07
【问题描述】:

我正在尝试使用向上迁移在一个表中添加一列。我为此创建了迁移并运行rake db:migrate:up[version] 它在我的表中添加了该列,但我在各自的模型中看不到该属性。我在这里想念什么吗?下面是我的sn-p ...

migration 6, :add_role_users do
  up do
    execute <<-SQL
      ALTER TABLE users
        ADD COLUMN role varchar(32) DEFAULT NULL
    SQL
  end
  down do
    execute <<-SQL
      ALTER TABLE users
        DROP COLUMN role
    SQL
  end
end

运行上述迁移后,我的用户模型中看不到下面的行

property :role, , String, :length => 32

请建议,我使用的是 Rails 3.0,所以我不能使用迁移更改方法。

【问题讨论】:

  • 我不明白您希望迁移对您的用户模型做什么?它根本不应该直接影响它,它所做的只是添加数据库列。另外,你为什么在迁移中使用原始 sql 而不是简单的 rails 助手?

标签: ruby-on-rails rails-migrations


【解决方案1】:

Rails 会根据表的列自动检测和分配模型属性。有关如何完成此操作的一般信息,本指南非常宝贵:http://guides.rubyonrails.org/migrations.html

无论如何,下面是我将如何运行迁移,将role 列添加到users 表。

  1. 在您的控制台中,运行 rails g migration add_role_column_to_users role:string(由于迁移名称以“users”结尾,Rails 会自动知道将此迁移应用到 users 表。指定 role:string 只是一个命令行快捷方式,它会自动将 t.add_column :role, :string 添加到您的迁移中。运行此之后命令你应该能够在你的应用程序的db/migrate/ 目录中找到你的新迁移。)

  2. 在您的控制台中,运行 rake db:migrate 将数据库迁移到您的新架构。

  3. 就是这样!您现在应该在“用户”表上有一个“角色”列。您可以通过使用rails c 进入Rails 控制台并使用User.column_names 调出用户模型的列名来验证这一点。您应该在那里看到“角色”。

【讨论】:

  • 哎呀,抱歉,我没有意识到您使用的是 Rails 3.0。这个答案可能只适用于 Rails 3.1+
  • 是的,我使用的是 3.0,我尝试了上述过程,但它不适用于 3.0,所以我们有什么方法可以自动更新模型,就像它如何使用迁移一样Rails 3.1+ 无需手动更改模型
猜你喜欢
  • 2017-09-27
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 2022-06-17
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多