gpt4 book ai didi

ruby-on-rails - Rails 4 迁移:Mysql2::Error:列 'xxxx' 的数据太长

转载 作者:行者123 更新时间:2023-12-04 04:13:49 26 4
gpt4 key购买 nike

这是我的 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:"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 ”插入数据库而没有错误。

Rails 4 中是否删除了有关此内容的任何内容?

我应该自己在模型中添加一些截断函数吗?谢谢!

最佳答案

你看到的是 MySQL 的不同,而不是 Rails。默认情况下,MySQL 会截断太长的数据而不是抛出错误。如果您将 MySQL 设置为 strict模式,它将抛出错误而不是静默截断数据。

使用版本 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

关于ruby-on-rails - Rails 4 迁移:Mysql2::Error:列 'xxxx' 的数据太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com