【发布时间】:2014-08-10 04:51:56
【问题描述】:
这是我的 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 中是否删除了关于此的任何内容?
我应该自己在模型中添加一些截断函数吗?谢谢!
【问题讨论】:
-
对于最后一个问题,可能取决于您创建
User的用例。也许最好添加一个验证器来检查:name的长度,如果它结束太长,则向用户显示错误? -
验证可能是要走的路,因为用户应该知道他们的名字不能超过 6 个字符。否则当他们输入“Jonathan”时他们可能会感到惊讶,但当他们查看他们的个人资料时,他们的名字被列为“Jonath”。
-
谢谢,我知道更好的方法是添加一些验证。但我只是想弄清楚 Rails 4 中发生了什么变化,而且我有一些模型对用户是不可见的,所以在这种情况下,验证无法帮助我。
-
我明白了。从您所说的看来,Rails 4 中发生了变化......如果该列对用户不可见,则可以在
before_save回调函数中截断它。
标签: ruby-on-rails ruby-on-rails-4 rails-migrations