我有一个模型,UUID存储在
MySQL表的BINARY(16)字段中.我希望能够透明地将十六进制uuid转换为二进制用于setter方法,并在我使用getter方法时返回.
什么是’正确’的方式进行?
@H_502_4@解决方法
你重写setter和getter:
class User < ActiveRecord::Base def uuid=(value) @uuid = write_attribute(:uuid,value.scan(/../).map {|n| n.to_i(16)}.pack("C*")) end def uuid @uuid ||= read_attribute(:uuid).unpack("C*").map {|n| sprintf("%02x",n)}.join end end
当然,您需要一个BINARY列,因为您正在向DB发送原始字节.像这样的迁移:
class AddUuidToUsers def self.up execute "ALTER TABLE users ADD uuid BINARY(16)" end end@H_502_4@ @H_502_4@ 原文链接:https://www.f2er.com/ruby/264610.html