0

以以下为例:

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”时会触发。)

任何建议表示赞赏!

4

2 回答 2

2

Baz的回调只有在您将其创建为对象时才会被触发Baz,即Baz.new(...).

但是,您创建的不是Baz记录,而是Bar记录:Bar.new(type: 'Baz')。这只会触发Bar的回调,即使稍后它将被视为Baz.

于 2013-12-03T09:09:12.550 回答
0

您需要在 Foo.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

于 2014-08-20T16:48:31.650 回答