Ruby on rails 在sqlite3数据库中保存rails封送处理时出现问题

Ruby on rails 在sqlite3数据库中保存rails封送处理时出现问题,ruby-on-rails,marshalling,Ruby On Rails,Marshalling,这就是我试过的 f = 1.2 f = Marshal.dump(f) #\004\bf\v1.2\00033 之后,我试图将这个f保存到文本列中,这是一个错误 ActiveRecord::StatementInvalid: SQLException: unrecognized token: "fϾ1.2 33" (Ͼ is male symbol, but I can't find one). 我在模型中使用了一个简单的包装器,它转储数据并将其编码为base64,以便它是一个原始字符串:

这就是我试过的

f = 1.2
f = Marshal.dump(f) #\004\bf\v1.2\00033
之后,我试图将这个f保存到文本列中,这是一个错误

ActiveRecord::StatementInvalid: SQLException: unrecognized token: "fϾ1.2 33" (Ͼ is male symbol, but I can't find one).

我在模型中使用了一个简单的包装器,它转储数据并将其编码为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

phoet的答案很好,我只添加了对空值的支持,这样在加载时就不会出错

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

def education
  data = read_attribute :education
  if data
    Marshal.load(ActiveSupport::Base64.decode64(data))
  else
    nil
  end
end  

别忘了标记已解决的答案