Как установить значение по умолчанию для столбца / атрибута JSON в активной записи Rails? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть что-то вроде этого класса

#  json_column  :json
class MyClass < ActiveRecord::Base
  def name=(val)
    json_column[:name] = val
  end

  def name
    json_column[:name]
  end
end

Работает нормально, когда я загружаю данные, но если я создаю новый экземпляр типа MyClass.new(name: "foo"), у меня начинаются проблемы ...

Если я оставлю все как есть, оно будет исключение в name=, потому что nil не является хешем:).

Если я попытаюсь инициализировать json_column в методе after_initialize

after_initialize { self.json_column ||= {}  }

Это также не работает, потому что кажется, что after_initialize вызывается после установки параметров

У кого-нибудь есть подсказка, как мне решить эту проблему? Заранее спасибо

1 Ответ

1 голос
/ 11 июля 2019

Вы можете использовать обратные вызовы store затем after_initialize, как это, чтобы назначить значения по умолчанию


    store :json_column_name, accessors: [:key_name], coder: Hash # in mysql

    store_accessor :json_column_name, [:key_name] # in psql

    after_initialize :initialize_defaults, :if => :new_record?

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