Bagaimana cara menangani dua saudara kandung, dengan to_json selanjutnya?

Dokumen to_json ActiveRecord menyatakan ini untuk menangani dua model bertumpuk, yang mana komentar disarangkan dalam postingan :

  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"}]}

Misalkan saya memiliki dua model yang bertingkat, tetapi tidak bertumpuk dalam. Katakanlah ini adalah model pengguna dan model komentar. Model yang disarangkan akan menjadi apa yang saya sebut saudara yang bersarang.

Saya ingin json saya terlihat seperti ini:

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

Ketika saya menggunakan metode penyertaan dua kali, yang saya dapatkan adalah serangkaian json yang sangat bersarang, di mana pengguna adalah anak-anak dari komentar. apa yang salah?!

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]
      )

person JZ.    schedule 05.06.2013    source sumber


Jawaban (1)


Mengapa Anda memiliki blog dua kali?

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

Menurut saya, blog kedua seharusnya tidak ada di sana. Coba ini:

blog.to_json(
  :include => [
    {
      :comments => {
        :except => SKIPPED_COLUMNS,
        :methods => [:_type]
      }
    }, {
      :users => {
        :except => SKIPPED_COLUMNS,
        :methods => [:_type]
      }
    }
  ],
  :except => SKIPPED_COLUMNS,
  :methods => [:_type]
)
person Sergey Bolgov    schedule 06.06.2013
comment
itu hanya salah ketik. Ini sebenarnya disimpan dalam data - person JZ.; 06.06.2013