以下面的例子为例:
class Foo < AR::Base
has_many :bars, :as => :barable, :dependent=> :destroy
accepts_nested_attributes_for :bars, :allow_destroy => true
end
class Bar < AR::Base
belongs_to :barable, :polymorphic => true
end
class Baz < Bar
before_save do
raise "Hi"
end
end
在'Foo'的表单中 - 我有fields_for :bars_attributes
隐藏字段将type
设置为'Baz'。 'Baz'已成功创建,但回调从未触发。 (但是,当在控制台中手动创建'Baz'时,它会激活。)
任何建议表示赞赏!
答案 0 :(得分:2)
Baz
的回调只有在您将其创建为Baz
对象时才会触发,即Baz.new(...)
。
但是,您没有创建Baz
记录,而是创建Bar
记录:Bar.new(type: 'Baz')
。
这只会触发Bar
的回调,即使稍后会将其视为Baz
。
答案 1 :(得分:0)
您需要在Foot.rb中指定其他关联
has_many :bazs
# or
# has_many :bazs class_name: 'ModuleName::Baz' # if you scoped your child classed within some module
如果你那样做
before_save do
raise "Hi"
end
将启动,例如@current_user.bazs.build