2

在ActiveRecord中使用新的accepts_nested_attributes_for時,可以使用選項:allow_destroy => true。當設置此選項時,包含嵌套屬性(如{"_delete"=>"1", "id"=>"..."})的任何散列傳遞給update_attributes將刪除嵌套對象。當allow_destroy => true時取消關聯而不是銷燬對象

設置簡單:

class Forum < ActiveRecord::Base 
    has_many :users 
    accepts_nested_attributes_for :users, :allow_destroy => true 
end 

class User < ActiveRecord::Base 
    belongs_to :forum 
end 

Forum.first.update_attributes("users_attributes"=>{"0"=>{"_delete"=>"1", "id"=>"42"}})

問:如何 - 而不是刪除嵌套對象時"_delete" => "1" - 只是刪除關聯? (即在上面的情況下,將用戶的forum_id設置爲零)

獎勵問題:如果我還想在刪除關聯時更改嵌套對象的屬性,該怎麼辦? (例如像設置的狀態或時間戳)

回答

2

而不是要求使用"_delete" => '1'刪除用戶,你能不能用?:nested_attributes

Forum.first.update_attributes("users_attributes"=> { 
    "0" => { 
    "id" => "42", 
    "forum_id" => "", 
    "state" => 'removed' 
    } 
}) 
剛剛更新