在sqlite3 db中保存rails marshal的问题

sar*_*unw 1 ruby-on-rails marshalling

这是我试过的

f = 1.2
f = Marshal.dump(f) #\004\bf\v1.2\00033
Run Code Online (Sandbox Code Playgroud)

之后我尝试将此f保存到文本列中,这是我得到的错误.

ActiveRecord::StatementInvalid: SQLException: unrecognized token: "f?1.2 33" (? is male symbol, but I can't find one).
Run Code Online (Sandbox Code Playgroud)

pho*_*oet 5

我在我的模型中使用一个简单的包装器来转储数据并将其编码为base64,这样它就是一个原始字符串:

def data=(data)
  write_attribute :data, ActiveSupport::Base64.encode64(Marshal.dump(data))
end

def data
  Marshal.load(ActiveSupport::Base64.decode64(read_attribute :data))
end
Run Code Online (Sandbox Code Playgroud)