ruby-on-rails – 如何在模型中透明地修改ActiveRecord方法?
发布时间:2020-12-16 23:26:16 所属栏目:百科 来源:网络整理
导读:我有一个模型,UUID存储在 MySQL表的BINARY(16)字段中.我希望能够透明地将十六进制uuid转换为二进制用于setter方法,并在我使用getter方法时返回. 什么是’正确’的方式进行? 解决方法 你重写setter和getter: class User ActiveRecord::Base def uuid=(value
我有一个模型,UUID存储在
MySQL表的BINARY(16)字段中.我希望能够透明地将十六进制uuid转换为二进制用于setter方法,并在我使用getter方法时返回.
什么是’正确’的方式进行? 解决方法
你重写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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |