0

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

尝试在子模型中使用 after_create 对我的目的不起作用,因为我试图在 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"}}}

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

我不知道正确的路径是尝试弄乱参数还是考虑不同的路线。任何建议将不胜感激。

谢谢,威尔斯

4

2 回答 2

0

Rails api 有一个很好的嵌套属性文档。(在我看来,Rails 指南在这方面不足)。我认为它应该回答你的大部分问题。

于 2012-07-12T02:41:29.757 回答
0

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

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

if params[:id]
  #existing record
else
  #new record
end
于 2012-07-11T04:42:38.493 回答