Подскажите, как использовать ActiveRecord # afeter_add - PullRequest
0 голосов
/ 03 июня 2010

Теперь у меня возникла проблема, как я могу сделать так, чтобы колбэк # after_add получал ссылку на модель соединения в ассоциации has_many: through? мой код так:

   class Emergency
     has_many :departments, :through => :eme_references, :after_add => Proc.new { |eme_reference| eme_reference.eme_flag = 1}
  end

атрибут eme_flag является атрибутом модели EmeReference! но в блоке я получаю eme_reference.class является чрезвычайным. Я хочу установить атрибут eme_flag модели EmeReference. Это мой вопрос! ура!

Ответы [ 2 ]

0 голосов
/ 03 июня 2010

Предположительно Emergency также has_many :eme_references для работы ассоциации :through?

В этом случае вы сможете прикрепить туда обратный вызов:

has_many :eme_references, 
  :after_add => Proc.new { |emergency, eme_ref| # code here }

Блок принимает 2 параметра, первым будет Emergency, вторым будет добавляемый EmeReference.

Возможно, обратный вызов before_save на EmeReference также может делать то, что вы хотите в этом случае?

0 голосов
/ 03 июня 2010

Я думаю, что то, что вы хотите сделать, не может быть сделано там.

Вы можете создать ловушку after_create для отделов (я предполагаю, что Emergency has_many eme_references has_many отделы):

class Emergency
  has_many :departments, :through => :eme_references
  def flag!
    eme_flag=1
    save
  end
end

class Department
  after_create :check_emergency
  # this allows you to call department.emergency. Will return nil if anything is nil
  delegate :emergency, :to =>:eme_reference, :allow_nil => true

  def check_emergency
    self.emergency.flag! if self.emergency.present?
  end
end
...