Ruby on rails 在\u之后,为已添加的\u添加回调
这似乎是“有很多”和“有一个”之间的不一致 has_many关联允许您指定在将对象添加到集合后调用的after_add回调Ruby on rails 在\u之后,为已添加的\u添加回调,ruby-on-rails,activerecord,callback,associations,Ruby On Rails,Activerecord,Callback,Associations,这似乎是“有很多”和“有一个”之间的不一致 has_many关联允许您指定在将对象添加到集合后调用的after_add回调 class Person has_many :parents, :after_add => { puts "Added new parent" } # allowed has_one :car, :after_add => { puts "Added car" } # not allowed end class Car after_create :
class Person
has_many :parents, :after_add => { puts "Added new parent" } # allowed
has_one :car, :after_add => { puts "Added car" } # not allowed
end
class Car
after_create :assign_name
def assign_name
self.name = "Herbie"
end
end
不幸的是,has_one关联没有after_add回调。如何为has\u one实现相同的功能?我认为您可以在保存前使用,并检查车辆关系是否已更改:
before_save :do_something
def do_something
puts "Added car" if car_changed?
end
我给出的原始示例有点过于简化。我真正的问题包括对汽车模型的创建后回调。不幸的是,Car#after#create是在Person#before#save之后调用的,因此名称还不可用。您可以将其反转,然后-在您的汽车模型中创建的after#中,检查关联的Person记录是否是新的#?在那里进行处理。我希望避免这样做。我花了足够长的时间试图找到一个干净的方法来做这件事,但现在看起来没有。也许是时候对rails源代码进行破解并添加缺少的回调了。