Подскажите, как использовать ActiveRecord#afeter_add
Теперь у меня возникла проблема, как я могу сделать так, чтобы колбэк #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 ответа
Предположительно Emergency
также has_many :eme_references
для того, чтобы :through
ассоциация работать?
В этом случае вы должны иметь возможность прикрепить туда обратный вызов:
has_many :eme_references,
:after_add => Proc.new { |emergency, eme_ref| # code here }
Блок принимает 2 параметра, первым будет Emergency
2-й будет EmeReference
добавляется
Возможно before_save
обратный звонок на EmeReference
также можете делать то, что вы хотите в этом случае?
Я думаю, что то, что вы хотите сделать, не может быть сделано там.
Вы можете создать ловушку 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