update_attributes rails区分创建和更新

时间:2012-07-11 00:48:57

标签: ruby-on-rails-3 nested-forms update-attributes

我有一个嵌套的表单(非常类似于RailsCasts中显示的表单)我使用update_attributes,它更新父对象以及更新和创建新的子对象。我希望能够区分创建子对象的时间和更新子对象的时间以及更新父对象的时间。反正有没有这样做?我的直接目标是在创建新的子对象时推送广播。

尝试在子模型中使用after_create do不能用于我的目的,因为我试图在application_controller.rb中调用一个动作。

代码是我的父对象控制器

if @parent_object.update_attributes(params[:parent_object])
  ...want the push_broadcast to go here if it's a new record. 

如果我使用调试器,params [:parent_object]会返回此

{"overall_sharing"=>"1", "permissions_attributes"=>{"0"=>{"id"=>"66"}, "1"=>  {"can_edit"=>"1", "can_copy"=>"1", "_destroy"=>"false", "id"=>"74"}, "1341967403169"=>{"user_id"=>"171", "can_edit"=>"1", "can_copy"=>"1", "_destroy"=>"false", "note_id"=>"423"}}}

作为参考,最后一位是新的子对象,第一位是更新父对象,中间是更新子对象。

我不知道正确的道路是试图弄乱参数还是想到不同的路线。任何建议将不胜感激。

谢谢,威尔斯

2 个答案:

答案 0 :(得分:0)

如果是新记录,则不会有ID。与编辑或更新时不同。

试着找到它。如果你不能那么它就是新的。

if params[:id]
  #existing record
else
  #new record
end

答案 1 :(得分:0)

Rails api对嵌套属性有nice documentation。 (在我看来,Rails指南在这方面不尽如人意)。我认为它应该回答你的大部分问题。