Ruby on Rails:如何迁移模型上的更改?

Rui*_*Rui 10 ruby ruby-on-rails rails-models rails-migrations ruby-on-rails-3

在Rails应用程序中,如何迁移我在模型中所做的更改?例如,我知道如果我使用命令"rails g model Person name:string"创建一个模型,也会创建一个迁移.但是,如果在此步骤之后我转到创建的模型"Person"并添加一个新属性,是否会将此新属性自动添加到迁移中以便以后在数据库中持久化?或者我是从错误的一面看这个,并且应该将一个属性添加到迁移中,然后添加到模型中?

问候

Chr*_*erg 12

您无法真正"向模型添加"属性,您可以通过创建迁移文件并运行它来实现 - Rails根据数据库中的列来确定模型的属性.但是,你需要添加一行到模型中,如果你希望能够通过质量分配以更新其为白名单属性.这就是为什么你经常会在activerecord模型中看到这样的一行:

attr_accessible :name
Run Code Online (Sandbox Code Playgroud)

但这是可选的,并不是添加属性所必需的.

要将新属性实际添加到模型中,请首先使用以下命令创建迁移:

rails g migration AddAddressToPerson address:string
Run Code Online (Sandbox Code Playgroud)

这将在db/migration /目录中创建迁移文件.(rails表示"AddXXXToYYY"和"RemoveXXXFromYYY"形式表示"向模型XXX添加(或删除)新列",有关详细信息,请参阅文档).在这种情况下,我添加了一个名为address字符串的属性,但您可以将其更改为您想要的任何属性.

然后要实际更新数据库,您需要使用以下命令运行迁移rake:

rake db:migrate
Run Code Online (Sandbox Code Playgroud)

最后,如果要允许对该属性进行质量赋值,请将该属性添加到参数列表中attr_accessible:

attr_accessible :name, :address
Run Code Online (Sandbox Code Playgroud)

应该这样做.