2

在 ActiveRecord 中使用新功能accepts_nested_attributes_for时,可以使用选项:allow_destroy => true. 设置此选项后,任何包含嵌套属性(如{"_delete"=>"1", "id"=>"..."}传递给)的哈希update_attributes都将删除嵌套对象。

简单设置:

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 设置为 nil)

额外问题:如果我还想在删除关联时更改嵌套对象的属性怎么办?(例如设置状态或时间戳)

4

1 回答 1

2

与其要求使用 删除用户"_delete" => '1',不如仅使用 nested_attributes 更新它吗?:

Forum.first.update_attributes("users_attributes"=> { 
  "0" => {
    "id" => "42",
    "forum_id" => "",
    "state" => 'removed'
  }
})
于 2009-08-19T13:41:24.337 回答