# models
class A < ActiveRecord::Base
has_many :b
class B < ActiveRecord::Base
belongs_to :a
# controllers
class aController < ApplicationController
def a_with_b
@a_with_b = A.find(1, :include => [:b])
puts @a_with_b # => #<A id:1> // `b` not mapped to `@a_with_b`
puts @a_with_b.b # => [#<B id:1>, #<B id:2>] // still there's `b`
end
end
问题:
b
如何映射到@a_with_b
?
预期:
puts @a_with_b # => #<A id:1 b:[#<B id:1>, #<B id:2>] >
上面写的所有内容的实际原因是能够获得具有适当结构的序列化对象: e.g。
{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>
Rails v.2.3
答案 0 :(得分:1)
如果要在JSON中序列化数据,可以这样做:
@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
答案 1 :(得分:0)
我只是花了一些时间来讨论这个实现,看起来发生的事情是从数据库中提取数据,并将其放入activerecord对象缓存中,这样如果你引用它们,它就不会需要数据库查询。 不的对象最终以你想要的方式嵌套,但我想不出这应该是一个问题的原因。
换句话说,除非您发现生成的SQL查询不符合您的期望,否则这可能是您想要的行为。