![](/img/trans.png)
[英]How to add an element into an array of a Serialize Field using Ruby on Rails
[英]How to validate a binary field using Ruby on Rails?
我想确保二进制字段始终具有值。 我添加了如下验证码。
class Foo < ActiveRecord::Base
validates :b, presence: true
end
但是,这种变化似乎会导致错误。
$ rails c
> Foo.create(b:File.read('b.jpg'))
ArgumentError: invalid byte sequence in UTF-8
错误并不总是出现。 仅当二进制数据具有非ascii代码时。
如何验证二进制字段?
我创造了如下环境。 还需要图像文件(b.jpg,小于16KB)。
$ rails --version
Rails 4.2.0
$ rails new test_binary --database=mysql
$ cd test_binary/
$ rails g model foo b:binary
$ rake db:create db:migrate
File.read
返回一个声明默认具有UTF-8编码的String
。 这意味着:
Foo.create(b: File.read('b.jpg'))
是真的:
some_utf8_string = File.read('b.jpg')
Foo.create(b: some_utf8_string)
但JPEG很少会是一个有效的UTF-8字符串,因此每当有人试图将其视为UTF-8时,您就会得到ArgumentError
。
您可以在阅读JPEG时指定编码:
Foo.create(b: File.read('b.jpeg', encoding: 'binary'))
这应该超过你的编码问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.