在Ruby on Rails中更改数据库列的命令
问题描述:
是否有快速控制台命令可以运行以更改我对某个对象的类型?它目前是Ruby Date类型,但我希望它是Ruby Time类型。在Ruby on Rails中更改数据库列的命令
我开始用这个脚手架命令:
$ rails generate scaffold Post title:string content:text postdate:date
,但希望我会做以下几点:
$ rails generate scaffold Post title:string content:text postdate:time
是否有一个命令,可以运行,使更新?
答
有时你必须写一些实际的代码,即使在Rails中。尝试创建迁移,然后使用change_column
方法。类似于
change_column :my_table, :my_column, :new_type
你把它放在你的数据库迁移文件中,而不是在shell中。
+1
编写代码?啊。我对铁轨感到失望:) – Brig 2010-12-20 18:02:05
答
如果您不想让错误成为迁移集的永久部分,只需简单地向下迁移(rake db:rollback
),编辑迁移文件并迁移回备份(rake db:migrate
)。
编辑:要回答你关于存在单个命令的问题吗?就在这里。编辑完你的迁移之后:
rake db:migrate:redo
这会在一个命令中运行“向下”,然后是“向上”。
答
三个步骤来改变列的类型:
步骤1:
rails g migration sample_name_change_column_type
步骤2::
转到
使用此代码生成一个新的迁移文件/db/migrate
文件夹并编辑您所做的迁移文件。有两种不同的解决方案。
def change change_column(:table_name, :column_name, :new_type) end
2.
def up
change_column :table_name, :column_name, :new_type
end
def down
change_column :table_name, :column_name, :old_type
end
第3步:
不要忘记做这个命令:
rake db:migrate
我已经测试这个解决方案对于Rails 4,它运行良好。
是否有一个原因,为什么默认值:timestamps(created_at,updated_at)是不够的? – 2010-12-20 18:08:15
是的,因为postdate可能会被回溯。 – Brig 2010-12-20 19:56:26