JSON包括语法

时间:2011-01-11 03:13:04

标签: ruby-on-rails json

我的设置:Rails 2.3.10,Ruby 1.8.7

我在几个模型之间有一套相当复杂的关系。

class A
  has_many :classB
  has_many :classD
end

class B
  belongs_to :classA
  has_many :classC
end

class C
  belongs_to :classB
  belongs_to :classE
end

class D
  belongs_to :classA
  belongs_to :classE
end

class E
  has_many :classD
  has_many :classC
end

我遇到了使用JSON语法的问题,以获取以classA开头的所有相关信息。这是我到目前为止所做的工作。

classA.to_json(:include => {:classB => {:include => [:classC, :classE]}})

我无法使语法工作,还包括classD和相关的classE记录。

UPDATE 实际上这样的事情可能有用,除了我不能混合哈希和数组

classA.to_json(:include => [ :classB => { :include => { :classC => { :include => :classE } } },
                             :classD, :classE  ])

请注意,我在上面的示例代码中没有使用单数/复数,但在我的实际代码中,我是。任何见解都将非常感激。

谢谢, 鲍勃

3 个答案:

答案 0 :(得分:13)

这应该有效:

classA.to_json(:include => {
  :classB => {:include => {:classC => {:include => :classE}}},
  :classD => {},
  :classE => {},
})

答案 1 :(得分:1)

我不知道您是否希望通过C类和C类包含classE,但这应该有效:

classA.to_json(:include => { :classB => { :include => { :classC => { :include => :classE } } },
                             :classD => { :include => :classE } })

编辑:

class A
  has_many :bs
  has_many :ds
end

class B
  belongs_to :a
  has_many :cs
end

class C
  belongs_to :b
  belongs_to :e
end

class D
  belongs_to :a
  belongs_to :e
end

class E
  has_many :ds
  has_many :cs
end

@class_a = A.first
@class_a.to_json(:include => { :bs => { :include => { :cs => { :include => :e } } },
                               :ds => { :include => :e } })

答案 2 :(得分:0)

试试这个,你应该只需要一个:include =>

classA.to_json(:include => {:classB => [:classC, { :classE => :classD }] })