ассоциация has_many, вложенные модели и обратные вызовы - PullRequest
1 голос
/ 10 мая 2010

У меня есть модель A и модель Attach. Я редактирую свою форму A с вложенными атрибутами для: присоединяет. И когда я удаляю все вложения из A через accepts_nested_attributes_for, как я могу получить обратные вызовы after_update / after_save для всех моих вложенных моделей? Проблема в том, что когда я выполняю обратные вызовы в модели A, они выполняются правильно, ПОСЛЕ обновления модели А и ДО обновления модели присоединения, поэтому я не могу, например, знать, НЕТ ли ЛЮБЫХ присоединений после того, как я удалю их все :) .

Посмотрите, например: мой обратный вызов after_save :update_status не будет работать должным образом после того, как я удалю все свои вложения.

model A
  after_save :update_status
  has_many :attaches
  accepts_nested_attributes_for :attaches, :reject_if => proc { |attributes| attributes['file'].blank? }, :allow_destroy => true

  def update_status
    print "\n\nOUPS! bag is empty!\n\n" if self.attaches.empty?
  end
end

model Attach
  belongs_to A
end

Я использую рельсы 3 бета

Ответы [ 2 ]

2 голосов
/ 10 мая 2010

С rubyonrails.org:

ВАЖНО: Чтобы наследование работало для очередей обратных вызовов, необходимо указать обратные вызовы перед указаниемассоциации.В противном случае вы можете запустить загрузку потомка до того, как родитель зарегистрирует обратные вызовы, и они не будут наследоваться.

Разве это не ваша проблема?Вы указываете связь перед обратным вызовом.

0 голосов
/ 11 мая 2010

Хорошо, я удалил обратный вызов after_save из A для вложенной модели Attach (обратный вызов after_destroy)

model A
  has_many :attaches
  accepts_nested_attributes_for :attaches, :reject_if => proc { |attributes| attributes['file'].blank? }, :allow_destroy => true
end

model Attach
  after_destroy :update_status
  belongs_to :a

  def update_status
    print "\n\nOUPS! bag is empty!\n\n" if self.a.attaches.empty?
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...