Ruby on rails Rails:将嵌套属性映射到模型&x27;s对象
上述所有内容的实际原因是为了能够获得具有适当结构的序列化对象: e、 gRuby on rails Rails:将嵌套属性映射到模型&x27;s对象,ruby-on-rails,ruby,Ruby On Rails,Ruby,上述所有内容的实际原因是为了能够获得具有适当结构的序列化对象: e、 g {something:true,nothing:false,a:@a_with_b}.to_xml#=> 真的 假的 1. 1. 2. Rails v.2.3我刚刚花了一些时间研究了它的实现,看起来发生的事情是从数据库中提取数据,并将其放入activerecord对象缓存,这样,如果引用它们,就不需要数据库查询。这些对象最终并没有按照您希望的方式嵌套,但我想不出这会成为问题的原因 换句话说,除非您看到生成的SQL查询不符
{something:true,nothing:false,a:@a_with_b}.to_xml#=>
真的
假的
1.
1.
2.
Rails v.2.3我刚刚花了一些时间研究了它的实现,看起来发生的事情是从数据库中提取数据,并将其放入activerecord对象缓存,这样,如果引用它们,就不需要数据库查询。这些对象最终并没有按照您希望的方式嵌套,但我想不出这会成为问题的原因
换句话说,除非您看到生成的SQL查询不符合您的期望,否则这可能是您想要的行为。如果您想用JSON序列化数据,可以这样做:
{something: true, nothing: false, a: @a_with_b}.to_xml # =>
<xml>
<something>true</something>
<nothing>false</nothing>
<a>
<id>1</id>
<bs>
<b> <id>1</id> </b>
<b> <id>2</id> </b>
</bs>
</a>
<xml>
可能只是因为#inspect for AR类不显示关联数据,无论是否加载。您可以通过在第一次
放置之后和第二次放置之前对其中一条b记录执行更新来测试这一点。如果您在第二次输出中没有看到更新,这意味着它一定是以前加载的,而不是延迟加载的。您是否正在尝试解决一个实际问题(您需要b
,但它们不在那里),或者您只是想了解发生了什么,以及放置的不同的原因?@困惑,是的,有一个小的。需要将序列化的@a_和_b
发送到前端@a_with_b
应该像我帖子中的“期望值”。分别发送a
和b
在我的情况下不起作用。我知道我可能会创建一个包含所有必要内容的新哈希,但我一直在寻找“railsway”来处理这个问题@ted,你能更新一下这个问题吗?好的。在a
内部是否有“railsway”来推动b
?您为什么需要它?如果你告诉我们,我们可能可以帮助解决更大的问题。在那之前,你很难知道你想要什么。请你看一下我的一条评论,找到困惑的答案。谢谢,我仍然想知道如何将一些值映射到ActiveRecord的模型对象
puts @a_with_b # => #<A id:1 b:[#<B id:1>, #<B id:2>] >
{something: true, nothing: false, a: @a_with_b}.to_xml # =>
<xml>
<something>true</something>
<nothing>false</nothing>
<a>
<id>1</id>
<bs>
<b> <id>1</id> </b>
<b> <id>2</id> </b>
</bs>
</a>
<xml>
@a_with_b = A.find(1, :include => [:b])
puts @a_with_b.to_json(:include => [:b]) # return a JSON encoded string
puts @a_with_b.as_json(:include => [:b]) # return a Hash