ActiveRecord всегда запускает некоторый код после получения - PullRequest
0 голосов
/ 18 июля 2011

Я пытаюсь всегда запускать некоторый код после .find или .where или чего-либо, что используется для извлечения объектов.

Например, следующее описывает, что я хочу, но не работает

Class Person < ActiveRecord::BA
  @mortality=true
end

Я хочу, чтобы @ mortality = true запускался всякий раз, когда создается объект Person. И исходя из моего текущего понимания ORM / ActiveRecord, новый объект создается всякий раз, когда выполняется поиск.Надеюсь, это правильно.

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Вы хотите сделать это в методе after_initialize:

class Person < ActiveRecord::Base
  def after_initialize
    @mortality = true
  end
end

Обратите внимание, что этого следует избегать, если это возможно, поскольку это происходит с каждым объектом, даже когда вы получаете огромные наборы результатов.

В этом (хотя и простом) случае вы можете выполнить назначение лениво, переопределив метод получения:

class Person < ActiveRecord::Base
  def mortality
    @mortality.nil? ? true : @mortality
  end
end

(здесь нельзя использовать nil gate ||=, поскольку он также фильтрует значения false)

0 голосов
/ 18 июля 2011

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

Поиск обратных вызовов after_find и after_initialize.

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