0

我正在学习 Lynda 课程,并且正在迁移数据库。因此,首先,我的新版 Rails (3.2.6) 中的默认语法似乎与视频中的相比存在一些语法差异,但我查看了 Ruby 网站并发现这可能无关紧要.

但是,我遇到的问题是,在创建Users定义要放入的列(属性)的模型时,它会创建所有内容,除了我自己定义的那些(名字、姓氏、电子邮件和密码)不会得到创建的。我假设只有创建日期、修改日期和 ID 可以,因为它们是默认的,并且开箱即用。

这是视频告诉您使用的代码:

class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.string "first_name", :limit => 25
      t.string "last_name", :limit => 50
      t.string "email", :default => "", :null => false
      t.string "password", :limit => 40
      t.timestamps
    end
  end

  def down
    drop_table :users
  end
end

我在下面的差异周围放了两个星号,主要的是def up我的版本中的默认值,但在视频版本中它是def self.up. 当我阅读 Rails 网站上的文档时,我注意到的另一件事是,您应该使用:. 由于视频给出的代码不起作用,我也尝试了下面的代码。但是我得到了相同的结果,t.strings实际上没有在表中创建。

class CreateUsers < ActiveRecord::Migration
  **def up**
    create_table :users do |t|
      t.string **:**first_name, :limit => 25
      t.string **:**last_name, :limit => 50
      t.string **:**email, :default => "", :null => false
      t.string **:**"password", :limit => 40
      t.timestamps
    end
  end

  **def down**
    drop_table :users
  end
end

所以两个问题:

  1. 我没有使用正确的语法吗?

  2. 第一次“设置”表后,如果再次设置,它会覆盖旧配置吗?我必须再次创建一个全新的数据库吗?我不确定通过更改“用户”文件并重新排列语法,然后执行 rake db:migrate 是否可以覆盖所有内容。

非常感谢你的帮助。

-戴夫

4

1 回答 1

1

符号与字符串无关紧要。Self.up 与 up 是较旧的样式,但也无关紧要。Rails 在模式迁移表中跟踪它已经运行的迁移。这样做的结果是,一旦运行迁移,rails 将不会再次运行它,即使您已经更改了它。

你可以做

rake db:rollback

让 rails 为上次运行的迁移运行 down 方法(因此下次运行时它将再次运行db:migrate

创建一个新的迁移以添加额外的列可能更合适 - 如果您已经将原始迁移推送到您的存储库,我通常会这样做

于 2012-06-16T09:35:42.487 回答