2010-12-20 66 views
2

是否有快速控制台命令可以运行以更改我对某个对象的类型?它目前是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 

是否有一个命令,可以运行,使更新?

+0

是否有一个原因,为什么默认值:timestamps(created_at,updated_at)是不够的? – 2010-12-20 18:08:15

+0

是的,因为postdate可能会被回溯。 – Brig 2010-12-20 19:56:26

回答

3

有时你必须写一些实际的代码,即使在Rails中。尝试创建迁移,然后使用change_column方法。类似于

change_column :my_table, :my_column, :new_type 

你把它放在你的数据库迁移文件中,而不是在shell中。

+1

编写代码?啊。我对铁轨感到失望:) – Brig 2010-12-20 18:02:05

2

如果您不想让错误成为迁移集的永久部分,只需简单地向下迁移(rake db:rollback),编辑迁移文件并迁移回备份(rake db:migrate)。

编辑:要回答你关于存在单个命令的问题吗?就在这里。编辑完你的迁移之后:

rake db:migrate:redo 

这会在一个命令中运行“向下”,然后是“向上”。

0

三个步骤来改变列的类型:

步骤1:

rails g migration sample_name_change_column_type 

步骤2::

转到

使用此代码生成一个新的迁移文件/db/migrate文件夹并编辑您所做的迁移文件。有两种不同的解决方案。

  1. 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,它运行良好。