сериализованный объект не преобразуется - PullRequest
0 голосов
/ 28 апреля 2011

У меня есть модель, называемая статистикой, в которой есть поле значения, содержащее Goals (самоопределяемый класс) данные

class Statistic < ActiveRecord::Base
  serialize  :value
end

Когда я пытаюсь получить доступ к goal_against (atr_reader класса Goals), я получаю

undefined method `goals_against' for #<String:0x54f8400>

Свойство value содержит следующие данные:

--- !ruby/object:Goals \ngoals: {}\n\ngoals_against: 1\ngoals_for: 0\nversion: 1\n

В строковом формате в соответствии с отладчиком.

Похоже, что rails не знает, что эти данные имеют тип Goals.

Кто-то знает, как это решить?

Спасибо

1 Ответ

1 голос
/ 28 апреля 2011

Три вещи:

Во-первых, где бы ни был определен ваш класс целей, убедитесь, что он загружен. В какой-то момент Rails прекратил автозагрузку вещей в папке lib. Поэтому, где бы ни находились ваши дополнительные классы, установите их в config.autoload_paths (в config / application.rb).

Во-вторых, когда вы объявляете столбец как сериализованный, у вас есть возможность указать класс. Это особенно полезно, когда вы работаете с пользовательским классом и хотите убедиться, что Rails выполняет преобразование правильно.

serialize :value, Goal

В-третьих, когда у вас есть столбец, который сериализуется, убедитесь, что у вас достаточно места для него. Другими словами, большую часть времени вы захотите, чтобы этот столбец был «текстовым», а не «строковым» в вашей схеме (в противном случае ваш движок sql молча обрежет все, что слишком велико, чтобы поместиться в строковый столбец, и в конечном итоге сохранить сломанный объект).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...