Проблема сохранения рельсов маршала в sqlite3 db - PullRequest
1 голос
/ 15 декабря 2009

Это то, что я пытался

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

Ответы [ 2 ]

5 голосов
/ 28 января 2010

Я использую в моей модели простую оболочку, которая выводит данные и кодирует их 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
0 голосов
/ 30 октября 2013

Ответ 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  
...