如何在活动记录to_json中包含嵌套和兄弟关联?

Mat*_*and 11 activerecord json ruby-on-rails

我有一个课程模型与另一个模型的2个关联,树:

belongs_to  :interaction_outline, :class_name => "Tree", 
                                  :foreign_key => "interaction_outline_id"
belongs_to  :token_outline, :class_name => "Tree", 
                                  :foreign_key => "token_outline_id"
Run Code Online (Sandbox Code Playgroud)

我读了这个,并且能够在我的控制器中包含兄弟关联.

@course.to_json(:include=> [:interaction_outline, :token_outline]
Run Code Online (Sandbox Code Playgroud)

我还能够获得多个嵌套关联:

@course.to_json(:include=>{:interaction_outline=> 
                              {:include=> {:tree_node=> 
                                     {:include=> :definition}}}} )  
Run Code Online (Sandbox Code Playgroud)

但是我不能同时获得兄弟和乘法嵌套包括:

@course.to_json (:include=> [{:interaction_outline=> 
                               {:include=> {:tree_node=> 
                                    {:include=> :definition}}}}, 
                            {:token_outline=> 
                               {:include=> {:tree_node=> 
                                   {:include=> :definition}}}} ] ) 
#NoMethodError (undefined method `macro' for nil:NilClass)
#the error you get when the syntax or the association is wrong
Run Code Online (Sandbox Code Playgroud)

我也尝试了这个:

@course.to_json (:include=> [:interaction_outline=> 
                               {:include=> {:tree_node=> 
                                   {:include=> :definition}}}, 
                          :token_outline=> 
                             {:include=> {:tree_node=> 
                                    {:include=> :definition}}} ] ) 
#same error
Run Code Online (Sandbox Code Playgroud)

这里的语法是什么?

Wiz*_*Ogz 29

你真的很亲密 只需使用哈希表示法而不是数组.

@course.to_json (:include=> {:interaction_outline=> 
                               {:include=> {:tree_node=> 
                                    {:include=> :definition}}}, 
                             :token_outline=> 
                               {:include=> {:tree_node=> 
                                   {:include=> :definition}}}} ) 
Run Code Online (Sandbox Code Playgroud)