加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读