【发布时间】:2014-02-20 01:04:49
【问题描述】:
在 Rails 中,update_attributes! 的倒数是什么?
换句话说,什么将记录映射到属性散列,从而重新创建该记录及其所有子记录?
答案不是ActiveRecord.attributes,因为它不会递归到子对象中。
澄清您是否有以下情况:
class Foo < ActiveRecord::Base
has_many :bars
accepts_nested_attributes_for :bars
end
然后你可以传递一个像这样的哈希
{"name" => "a foo", "bars_attributes" => [{"name" => "a bar} ...]}
到update_attributes。但目前尚不清楚如何为此目的以编程方式轻松生成这样的哈希。
编辑:
正如我在评论中提到的,我可以这样做:foo.as_json(:include => :bars)
但我想要一个使用accepts_nested_attributes_for :bars 声明的解决方案,以避免必须明确包含关联。
【问题讨论】:
-
“将重新创建该记录及其所有子记录”是什么意思?
-
生成散列相当容易,使用与响应 JSON 关系相同的方法,然后将其解析为散列。 (不过,并不是说这是最有效的方法。)
-
试试
obj.association_cache,它会给你更多的哈希 -
@DaveNewton,我可以根据需要使用
as_json或to_json,但是我必须传入一个哈希值,例如{:include => {:bars => {:include => :bazs}}} ...。我希望避免这种情况,因为模型已经知道accept_nested_attributes的用途。 -
@z5h 是的,没错。可能有一个嵌套的哈希 AR/对象转储器,但肯定有。
标签: ruby-on-rails ruby activerecord