Поскольку исходный вопрос не достиг цели, вот переписанная версия, которая лучше описывает проблему.
У меня есть следующие модели:
class LineItem < ApplicationRecord
has_many :line_item_options, :dependent => :destroy
has_many :options, through: :line_item_options
end
class LineItemOption < ApplicationRecord
belongs_to :option
belongs_to :line_item
has_many :charges, as: :chargeable, dependent: :destroy
after_create :build_charges
def build_charges
surcharges.each do |surcharge|
self.charges.create!(
surcharge_id: surcharge.id,
name: surcharge.name
)
end
end
end
class Charge < ApplicationRecord
belongs_to :chargeable, polymorphic: true
end
LineItemOption isмодель соединения, которая соединяет Option (не показан) с LineItem.В некоторых случаях LineItemOption также будет иметь дочернюю модель Charge.
В моей форме LineItem у меня есть следующий код:
= line_item.collection_check_boxes :option_ids, group.options, :id, :name_and_price do |option|
.checkbox
= option.check_box(class: "check")
= option.label
Когда LineItemOption создается с использованием помощника по форме collection_check_boxes
, after_create
обратный вызов срабатывает, как и ожидалось.Однако, когда LineItemOption уничтожается с использованием этого же помощника формы, обратный вызов не запускается.Чтобы проверить это, я использовал has_many :charges, as: :chargeable, dependent: :destroy
, а также обратный вызов before_destroy.В обоих случаях обратные вызовы работают из консоли rails, но не из помощника формы collection_check_boxes.
Глядя на журнал сервера, я вижу, что метод уничтожения вызывается в LineItemOption, который успешно запускается без также запуска соответствующейcallback
LineItemOption Destroy (0.7ms) DELETE FROM "line_item_options" WHERE "line_item_options"."line_item_id" = $1 AND "line_item_options"."option_id" = $2 [["line_item_id", 12], ["option_id", 1]]
(1.2ms) COMMIT
Redirected to http://localhost:3000/orders/6
Я сижу здесь и чешу голову, пытаясь выяснить, что происходит, и как решить эту проблему.Это обычное поведение с collection_check_boxes
помощником?