在 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)
奖励问题:如果我还想在删除关联时更改嵌套对象的 an 属性怎么办? (例如,设置状态或时间戳)
最佳答案
与其使用 "_delete"=> '1'
要求删除用户,不如使用 nested_attributes 更新它?:
Forum.first.update_attributes("users_attributes"=> {
"0" => {
"id" => "42",
"forum_id" => "",
"state" => 'removed'
}
})
关于ruby-on-rails - 当 :allow_destroy => true 时删除关联而不是销毁对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299617/
相关文章:
c# - 如何使用 C# System.Diagnostics.Process 与提示交互?
visual-studio - Visual Studio 调试菜单不可见
asp.net-mvc - Visual Studio 智能感知无法在一个 .ascx 文件中工作
latex - 如何编辑 BibTeX .bst FUNCTION {format.names}?
geolocation - 地理编码 - 将多个地址分组到主要城市
php - 将 curl stdout 捕获到 PHP 中的变量中
tinymce - 使用 tinymce,你必须处理 html 标记吗?