好的,所以你已经构建了你的模型'rails generate model test(inputs)'你已经rake db:migrate检查你的模式文件看起来都很好并正在工作并写入sqlite。但是你意识到你需要DB中的另一个属性。一种方法是rake db:rollback,在迁移文件中进行更改,rake db:migrate再次迁移,并且hey presto看起来都很好。但是做rake db:rollback已经丢失了我已经存储在sqlite中的所有数据。所以我猜这不是正确的方法吗?什么是最好的方法?
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.text :title
t.text :requester
t.text :requester_email
t.text :customer
t.text :contact
t.text :customer_email
t.text :customer_phone
t.string :type_of_change
答案 0 :(得分:1)
您可以使用rails g migration <migration_name>
(例如rails g migration add_foo_to_blah
)生成新迁移,然后在新迁移中进行所需的更改。
例如。您可以添加新列,重命名列等。
有关详细信息:http://guides.rubyonrails.org/migrations.html#creating-a-standalone-migration
答案 1 :(得分:0)
是的,db:rollback
会收回上次迁移,因此如果在上次迁移中添加了一些列,db:rollback
将删除它们(如果您更改迁移并再次运行,则这些字段将为添加了,但数据已经丢失了。)
添加更多字段的正确方法是生成新的迁移并在那里添加这些字段。
答案 2 :(得分:0)
事实上db:rollback
是最好的方法。当然,当您执行db:rollback
时,它会清除您现有的数据,但您需要db:migrate
才能让数据再次显示在表格中。
如果您不想rake db:rollback
,请创建另一个migration file
,以便为您完成工作。
修改强>
您需要执行以下命令才能在posts
表中添加该列。
rails g migration AddImplementerToPosts implementer:text
并执行rake db:migrate
以确保在表格中添加了该列。