这是我的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
我为“名称”列设置了限制字符串。
然后,在控制台中:
user = User.new(name:"1234567890",email:"[email protected]")
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', '[email protected]', '1234567890', '2014-06-19 15:08:15')
但是,当我切换到rails 3时。
我发现它自动截断了字符串“ 1234567890 ”,并将“ 123456 ”正确插入数据库。
是否有任何有关此问题的信息已在导轨4中删除?
我应该自己在模型中添加一些截断函数吗?谢谢!
您所看到的是MySQL中的差异,而不是Rails。默认情况下,MySQL会截断太长的数据,而不是抛出错误。如果将MySQL设置为strict
mode,它将引发错误,而不是默默地截断数据。
对于版本4,Rails默认情况下会打开严格模式。这就是为什么您在Rails 3上看到不同的行为的原因。这就是您可能想要的行为。默默地截断数据几乎总是有害的,并且可能导致用户非常困惑的行为。
如果您确实想截断数据,则可以关闭严格模式或使用前置过滤器:
before_save :truncate_username
def truncate_username
self.username = username.slice(0, 6)
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句