ruby-on-rails – 如何在模型中透明地修改ActiveRecord方法?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在模型中透明地修改ActiveRecord方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个模型,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

猜你在找的Ruby相关文章