【问题标题】:In a rails migration, how can you remove the limit of a field在 Rails 迁移中,如何删除字段的限制
【发布时间】:2010-08-14 16:51:41
【问题描述】:

下列说法正确吗?

 change_column :tablename, :fieldname, :limit => null

【问题讨论】:

    标签: ruby-on-rails ruby rails-migrations


    【解决方案1】:

    如果您之前在迁移中指定了限制并且只想删除限制,您可以这样做:

    change_column :users, :column, :string, :limit => 255
    

    255 是字符串列的标准长度,rails 只会消除您之前指定的限制。

    更新:

    虽然这适用于多个 Rails 版本,但您可能更适合使用 nil,就像在 Giuseppe 的回答中一样。

    change_column :users, :column, :string, :limit => nil
    

    这意味着您唯一做错的事情是使用null 而不是nil

    【讨论】:

      【解决方案2】:

      这就是发生在我身上的事情。

      我意识到表格中的字符串字段不足以容纳其内容,因此我生成了一个包含以下内容的迁移:

      def self.up
        change_column :articles, :author_list, :text
      end
      

      但是,在运行迁移之后,架构具有:

      create_table "articles", :force => true do |t|
        t.string   "title"
        t.text     "author_list", :limit => 255
      end
      

      这不好。那么我“重做”迁移如下:

      def self.up
        # careful, it's "nil", not "null"
        change_column :articles, :author_list, :text, :limit => nil
      end
      

      这一次,schema.rb 中的限制消失了:

      create_table "articles", :force => true do |t|
        t.string   "title"
        t.text     "author_list"
      end
      

      【讨论】:

      • 对我来说,我需要 rake db:migrate:reset 来真正更改限制,并且应该小心该命令,因为它会删除数据库。
      【解决方案3】:

      将列类型更改为:text。它没有限制。

      change_column :tablename, :fieldname, :text, :limit => nil
      

      【讨论】:

      • 这是不正确的...如果您只是从 :string 更改为 :text,rake db:migrate 将保留限制,当您尝试执行 heroku rake db 时会搞砸:架构:加载
      【解决方案4】:

      大多数数据库不支持无限制的字符串:您必须在 varchar(SIZE) 定义中指定大小。
      尽管您可以尝试,但我个人会选择:limit => BIG_ENOUGH_NUMBER。您也可以考虑对非常大的文本使用 CLOB 类型。

      【讨论】:

        【解决方案5】:

        要使其独立于 db-driver,应该这样写:

        add_column :tablename, :fieldname_tmp, :text
        Tablename.reset_column_information
        Tablename.update_all("fieldname_tmp = fieldname")
        remove_column :tablename, :fieldname
        rename_column :tablename, :fieldname_tmp, :fieldname
        

        【讨论】:

          【解决方案6】:

          我今天也是同一条船,试图删除我添加到文本字段的限制,但它不会接受。尝试了几次迁移。

          导轨 4.2.7.1 红宝石 2.3.1p112

          最后,唯一有效的方法是将限制指定为 255。尝试适应其他任何东西对我来说都行不通。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-07
            • 2011-04-30
            • 1970-01-01
            • 2015-10-07
            • 2012-04-24
            • 1970-01-01
            相关资源
            最近更新 更多