【问题标题】:Editing Database field type using db:migrate使用 db:migrate 编辑数据库字段类型
【发布时间】:2011-06-11 19:57:57
【问题描述】:

我正在开发一个 Ruby on Rails Web 应用程序,我有兴趣更改我的 Project 模型中的两个字段的类型。当我创建模型时,我给了我的两个字段(start_timeend_time)int 类型,我想将其更改为日期/时间类型。

由于我正在与一个团队合作(也可能因为这样做是正确的)我想使用rake db:migrate 更改这些字段类型。我将如何创建一个文件来做到这一点? Ruby/Rails 中最好的(或唯一的)日期/时间类型是什么?

【问题讨论】:

    标签: datetime ruby-on-rails-3 dbmigrate


    【解决方案1】:

    运行script/rails generate migration UpdateTimeFields 并使用以下命令。 (还有一个change_column 方法,但我不相信它能够在保留任何数据的同时将 int 列更改为 datetime 列)。

    class UpdateTimeFields < ActiveRecord::Migration
      def self.up
        rename_column :projects, :start_time, :old_start_time
        rename_column :projects, :end_time, :old_end_time
        add_column :projects, :start_time, :datetime
        add_column :projects, :end_time, :datetime
    
        # If applicable, insert code to iterate through your existing
        # records and update the new start_time and end_time fields
        # based on your int data.
    
        remove_column :projects, :old_start_time
        remove_column :projects, :old_end_time
      end
    
      def self.down
        # do the opposite of above: rename the datetime fields, create the int
        # fields again, migrate the data back into the int fields, and delete
        # the datetime fields.
      end
    end
    

    【讨论】:

    • 我是否使用日期时间获得任何额外的“功能”,例如日期时间选择器或至少错误格式的错误消息?
    • 当它是一个日期时间字段时,您可以进行适当的验证,轻松查询数据库的特定时间范围等。对于日期时间选择器,这是视图中的 UI 元素,与数据库字段。但是,大多数日期选择器将提交与日期时间字段兼容的数据。
    猜你喜欢
    • 2017-02-27
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    相关资源
    最近更新 更多