Как читать JSON из Ruby on Rails с помощью ExtJS - PullRequest
2 голосов
/ 29 июня 2009

У меня есть несколько существующих проектов, основанных на устаревшей среде PHP, и я надеюсь перенести их в Ruby on Rails с минимальными усилиями. Моя главная проблема сейчас - это формат, в котором возвращается JSON. Мой код внешнего интерфейса (все ExtJS) ожидает JSON в формате:

{
    "result": [
        [id: 1, name: "mike"],
        [id: 2, name: "john"],
        [id: 3, name: "gary"]
    ]
}

Но возврат по умолчанию из Ruby on Rails выглядит следующим образом:

{
    "result": [
        {"record" : {id: 1, name: "mike"}},
        {"record" : {id: 2, name: "john"}},
        {"record" : {id: 3, name: "gary"}}
    ]
}

Мой контроллер в основном ничего не делает, кроме:

@records = Record.find(:all)
respond_to do |format|
  format.json { render :text => @records.to_json}
end

Как видите, он добавляет дополнительный ключ к каждой записи, который мой внешний код ExtJS не может анализировать как есть. Есть ли способ предотвратить это?

Спасибо за любую помощь, которую вы можете предложить,

Майк Трпчич

Ответы [ 4 ]

4 голосов
/ 29 ноября 2009

в основном:

ActiveRecord::Base.include_root_in_json = false

или

YourClass.include_root_in_json = false

как описано здесь: http://apidock.com/rails/ActiveRecord/Serialization/to_json

2 голосов
/ 30 июня 2009

Вы также можете попробовать:

@records = Record.find(:all)
respond_to do |format|
  format.json { render :json => @records.map {|r| r.attributes } }
end
2 голосов
/ 07 июля 2009

Вот шаблон, который работает для меня:

format.json { render :json =>  {
          :rows => @data_array,
          :results => @data_array.length
        }, :callback => params[:callback]}

НТН

2 голосов
/ 29 июня 2009

Этот вопрос теперь можно закрыть, но я считаю уместным, что я опубликую решение для любого, кто столкнется с такой же ситуацией в будущем. Вы можете использовать следующий плагин: Ext Scaffold Generator . даже если вы не хотите использовать функциональность скаффолда, он добавляет дополнительный метод to_ext_json, который выводит JSON, который по умолчанию может читать ExtJS.

Спасибо всем, кто изучал этот вопрос и пытался мне помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...