Присвоение значения сериализованному атрибуту вызывает SerializationTypeMismatch - PullRequest
0 голосов
/ 14 сентября 2010

Меня удивляет, что об этом еще не спрашивали, поэтому я надеюсь, что делаю что-то в корне неправильно, и скоро помощь придет У меня есть это

create_table "foo", :force => true do |t|
  t.text     "bar",                                     :null => false
  ...
end

class Foo < AR::Base
   serialize :bar, Bar
end

class Bar
   def initialize(hsh)
     @data = hsh # and some more code...
   end
end

Теперь, когда я добавлю

class Foo < AR::Base
  before_validation :get_bar, :on => :create
  def get_bar
    self.bar = Bar.new({})
  end
end

Я не могу создать объекты Foo, потому что назначение Bar вызывает SerializationTypeMismatch. Я отладил это и обнаружил, что значение bar по умолчанию является пустой строкой, и AR проверяет это и завершается ошибкой.

Вопрос в том, как от него избавиться.

1 Ответ

2 голосов
/ 24 февраля 2011

При создании миграции вам нужно установить значение по умолчанию.

create_table "foo", :force => true do |t|
  t.text     "bar", :null => false, :default => Bar.new({}).to_yaml
  ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...