2013-06-05 2 views
0

to_json ActiveRecord документы говорят this для работы с двумя вложенными моделями, где комментариев вложен в сообщениях:Как обращаться с двумя вложенными братьями и сестрами, с to_json next?

konata.to_json(:include => { :posts => { 
           :include => { :comments => { 
               :only => :body } }, 
           :only => :title } }) 
    # => {"id": 1, "name": "Konata Izumi", "age": 16, 
     "created_at": "2006/08/01", "awesome": true, 
     "posts": [{"comments": [{"body": "1st post!"}, {"body": "Second!"}], 
        "title": "Welcome to the weblog"}, 
        {"comments": [{"body": "Don't think too hard"}], 
        "title": "So I was thinking"}]} 

Предположим, что у меня есть две модели, которые вложены, , но не глубоко вложенных. Предположим, что это модель модели пользователя и комментариев. Вложенные модели - это то, что я называю вложенными братьями и сестрами.

Я хотел бы мой JSON выглядеть следующим образом:

x = { 
    "Blog": { 
     "Comments": [ 
     {"id":1,"name":"John Doe"}, 
     {"id":2,"name":"Don Joeh"} 
     ], 
     "User": [ 
     {"id":2,"company":"ACME"}, 
     {"id":4,"company":"BUD"}] 
    } 
} 

Когда я использую метод включения в два раз, что я в конечном итоге представляет собой серию глубоко вложенного JSON, где пользователи являются детьми комментариев. что не так?!

data.to_json(
     :include => { :blog => { 
      :include => [{ :comments => { 
      :except => SKIPPED_COLUMNS, 
      :methods => [:_type] 
      }}, 
      { :users => { 
       :except => SKIPPED_COLUMNS, 
       :methods => [:_type] 
      }}], 
      :except => SKIPPED_COLUMNS, 
      :methods => [:_type] 
     }}, 
     :except => SKIPPED_COLUMNS, 
     :methods => [:_type] 
    ) 

ответ

0

Почему у вас есть blog?

blog.to_json(
    :include => { :blog => { 

Я думаю, второй blog не должен быть там. Попробуйте следующее:

blog.to_json(
    :include => [ 
    { 
     :comments => { 
     :except => SKIPPED_COLUMNS, 
     :methods => [:_type] 
     } 
    }, { 
     :users => { 
     :except => SKIPPED_COLUMNS, 
     :methods => [:_type] 
     } 
    } 
    ], 
    :except => SKIPPED_COLUMNS, 
    :methods => [:_type] 
) 
+0

Я не думаю, что это сработает. –

+0

это была просто опечатка. Фактически он хранится в данных –