我正在做Lynda课程,我正准备迁移数据库。首先,似乎我的Rails(3.2.6)的新版本中的默认值与视频中的默认值有所不同,但我看了一下Ruby网站并发现它可能无关紧要
然而,我遇到的问题是,在创建定义列(attribs)的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
所以有两个问题:
我没有使用正确的语法吗?
第一次“设置”表后,如果再次执行此操作,是否会覆盖旧配置?我是否必须再次创建一个全新的数据库?我不确定通过更改'users'文件并重新排列语法,然后执行rake db:migrate,我可以覆盖那里的内容。
非常感谢你的帮助。
-Dave
答案 0 :(得分:1)
符号与字符串无关紧要。 Self.up vs. up是较旧的风格,但也无所谓。 Rails跟踪它已在模式迁移表中运行的迁移。这样做的结果是,一旦迁移运行,即使您更改了它,rails也不会再次运行它。
你可以做到
rake db:rollback
让rails为最后一次运行的迁移运行down方法(因此下次运行时会再次运行db:migrate
)
创建新的迁移以添加额外的列可能更合适 - 如果您已将原始迁移推送到存储库,我通常会这样做