在 sqlite3 数据库中保存 Rails marshal 时出现问题

发布于 2024-08-14 06:55:41 字数 268 浏览 4 评论 0原文

这是我

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).

This is what I tried

f = 1.2
f = Marshal.dump(f) #\004\bf\v1.2\00033

after that I tried to save this f into text column and this is an error I got.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光磨忆 2024-08-21 06:55:41

我在模型中使用一个简单的包装器来转储数据并对其进行 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

i use a simple wrapper in my model that dumps the data and encodes it base64 so that it is a raw string:

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

def data
  Marshal.load(ActiveSupport::Base64.decode64(read_attribute :data))
end
你的笑 2024-08-21 06:55:41

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  

phoet's answer is good, I only added support for empty values so you don't get error while loading.

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  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文