ruby-on-rails – Rails 4迁移:Mysql2 ::错误:列’xxxx’的数
发布时间:2020-12-16 19:29:26 所属栏目:百科 来源:网络整理
导读:这是我的schema.rb create_table "users",force: true do |t| t.string "name",limit: 6 t.string "email" t.datetime "created_at" t.datetime "updated_at" end 我为“name”列设置了字符串限制. 然后,在控制台中: user = User.new(name:"1234567890",ema
这是我的schema.rb
create_table "users",force: true do |t| t.string "name",limit: 6 t.string "email" t.datetime "created_at" t.datetime "updated_at" end 我为“name”列设置了字符串限制. 然后,在控制台中: user = User.new(name:"1234567890",email:"username@gmail.com") user.save! 它引发了错误: ActiveRecord::StatementInvalid: Mysql2::Error: Data too long for column 'name' at row 1: INSERT INTO `users` (`created_at`,`email`,`name`,`updated_at`) VALUES ('2014-06-19 15:08:15','username@gmail.com','1234567890','2014-06-19 15:08:15') 但是,当我切换到rails 3时. 我发现它自动截断了字符串“1234567890”,并将“123456”插入数据库而没有错误. 在轨道4中有什么关于这个被删除了吗? 我应该自己在模型中添加一些截断函数吗?谢谢! 解决方法
您所看到的是MySQL的差异,而不是Rails.默认情况下,MySQL会截断太长的数据,而不是抛出错误.如果将MySQL设置为严格模式,它将抛出错误而不是静默截断数据.
默认情况下,版本4,Rails turns on strict mode.这就是为什么你看到Rails 3的不同行为.这是你可能想要的行为.静默截断数据几乎总是很糟糕,并且可能导致用户非常混乱的行为. 如果您确实要截断数据,可以使用turn off strict mode或使用之前的过滤器: before_save :truncate_username def truncate_username self.username = username.slice(0,6) end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |