在Ruby on Rails中更改DB列的命令

时间:2010-12-20 17:54:50

标签: ruby-on-rails ruby activerecord date scaffolding

我是否可以运行快速控制台命令来更改对象的类型?它目前是Ruby Date类型,但我希望它是Ruby Time类型。

我从这个脚手架命令开始:

$ rails generate scaffold Post title:string content:text postdate:date

但希望我能做到以下几点:

$ rails generate scaffold Post title:string content:text postdate:time

是否有命令可以运行以进行更新?

3 个答案:

答案 0 :(得分:3)

有时你必须编写一些实际的代码,即使在Rails中也是如此。尝试创建迁移,然后使用change_column方法。像

这样的东西
change_column :my_table, :my_column, :new_type

您将它放在db迁移文件中,而不是shell中。

答案 1 :(得分:2)

如果您不希望错误成为迁移集的永久部分,只需向下迁移(rake db:rollback),编辑迁移文件,然后向上迁移(rake db:migrate)。 / p>

编辑:要回答有关单个命令的问题?就在这里。编辑迁移后:

rake db:migrate:redo

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

答案 2 :(得分: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. 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测试了这个解决方案,它运行良好。