在导轨迁移中,你怎样去除一个字段的限制
以下是否正确?
change_column :tablename, :fieldname, :limit => null
如果您之前在迁移中指定了限制,并且想要删除限制,则可以这样做:
change_column :users, :column, :string, :limit => 255
255是一个string列的标准长度,并且rails将只消除先前指定的限制。
更新:
虽然这可以在许多Rails版本中使用,但是您可能更适合使用像Giuseppe的答案中的nil
。
change_column :users, :column, :string, :limit => nil
这意味着你做错了唯一的事情是使用null
而不是nil
。
这是发生在我身上的事情。
我意识到我在表中的string字段不足以保存它的内容,所以我产生了一个迁移,其中包含:
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
将列types更改为:text
。 它没有限制。
change_column :tablename, :fieldname, :text, :limit => nil
无限制的string不是大多数数据库支持的东西:必须在varchar(SIZE)
定义中指定大小。
虽然你可以尝试,我个人会去:limit => BIG_ENOUGH_NUMBER
。 你也可以考虑使用非常大的文本CLOBtypes。
为了使它独立于数据库驱动程序,应该这样写:
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
我今天是同样的船,试图消除我已经添加到文本字段的限制,它不会采取。 尝试了几次迁移。
Rails 4.2.7.1 Ruby 2.3.1p112
最后,唯一有效的工作是指定一个255的限制。试图调整到其他任何东西都不适合我。