Инициализация моделей ActiveRecord - PullRequest
0 голосов
/ 29 августа 2011

Я инициализирую некоторые атрибуты моей модели с помощью обратного вызова after_initialize, но этот обратный вызов вызывается при загрузке записи из базы данных, перезаписывая сохраненные значения.Вот модель:

class Post < ActiveRecord::Base
  serialize :tags

  after_initialize :init_tags

  def init_tags
    write_attribute :tags, []
  end
end

Есть ли способ сделать это без изменения обратного вызова на

  def init_tags
    if not read_attribute :tags
      write_attribute :tags, []
    end
  end

1 Ответ

0 голосов
/ 29 августа 2011

Сделайте так:

class Post < ActiveRecord::Base
  serialize :tags

  after_initialize :init_tags

  def init_tags
    self.tags ||= []
  end
end

Что эквивалентно вашему второму решению, только немного короче.Метод save не вызывается, но это не должно быть проблемой, поскольку он будет использоваться только при первой инициализации модели, а значение будет заполнено позже.

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