Rails - объект JSON с массивом? - PullRequest
0 голосов
/ 22 декабря 2010

Я могу создать и отправить объект JSON следующим образом:

  @mylist << {
    :id => item.id,
    :name => name.id
  }

render :json => { :result => 'success', :mylist => @mylist }

Это прекрасно работает. Проблема, с которой я столкнулся сейчас, заключается в том, что мне нужно включить пользователей с 1 или более на элемент.

  @mylist << {
    :id => item.id,
    :name => name.id,
    :users => item.users
  }

Где item.users содержит список (user.id, user.name, user.desc).

как включить массив как пользователи в объект json? Как встроить Rails, а затем разобрать его с помощью jQuery?

Спасибо

UPDATE

код выше находится внутри:

@items.each_with_index do |item, i|
end

Возможно, это проблема здесь?

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

Если items.users - это массив, он будет представлен как массив JSON.

Когда вы получите ответ JSON в вашем JavaScript, вам просто нужно перебрать массив:

for (var i = 0; i < data.users.length; i++) {
    //do something with data.users[i]
}

где data - данные JSON, возвращаемые при вызове Ajax.

0 голосов
/ 22 декабря 2010

Это должно работать нормально из коробки. Массивы внутри массивов не проблема. Rails перемещается по вашим объектам и пытается преобразовать их в простые объекты, такие как хеши, массивы, строки и числа Объекты ActiveRecord превратят все свои атрибуты в хеш при преобразовании его в JSON. Если item.users является массивом экземпляров ActiveRecord, ваш пример будет работать автоматически. Вы можете получить их в Javascript точно так же, как вы проходите через хэш и массив в Ruby. Так что-то вроде:

response['mylist']['users'][0]['name']

Редактировать

Чтобы ограничить поля в пользователе, добавьте метод в класс пользователя:

class User < ActiveRecord::Base
  def as_json(*)
    { :name => name, :desc => desc }
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...