2012-07-11 64 views
0

我有一個嵌套的表單(非常類似於RailsCasts中顯示的表格),我使用update_attributes,它更新父對象以及更新和創建新的子對象。我希望能夠區分何時創建子對象和何時更新子對象以及何時更新父對象。無論如何要這樣做?我的目標是在創建新的子對象時推送廣播。update_attributes rails區分創建和更新

試圖在子模型中使用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"}}} 

參考,最後一位是新的子對象,第一個是更新父對象,第二個是更新子對象。

我不知道正確的路徑是嘗試混淆參數還是想到不同的路線。任何意見將不勝感激。

謝謝,威爾斯

回答

0

如果它是一個新的記錄它不會有一個ID。與編輯或更新不同。

試着找到它。如果你不能那麼它是新的。

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

這是有道理的,但使用該方法的update_attributes,我會怎麼做呢?我的更新動作控制器代碼是'@permission_set = PermissionSetting.find(PARAMS [:ID])'此時@permission_set僅返回現有的權限然後'@ permission_set.update_attributes(PARAMS [:permission_setting])'在該點@permission_set返回所有的權限,包括新的權限(目前有一個id) – wir963 2012-07-11 13:46:35

0

對於嵌套屬性,Rails API有nice documentation。 (Rails指南在這方面不足,在我看來)。我認爲它應該回答你的大部分問題。