Создание вложенного JSON-запроса с Rails - PullRequest
0 голосов
/ 20 августа 2010

У меня сложная ситуация.Я создаю приложение для iPhone с бэкэндом рельсов.Есть два модельных объекта, сеанс чата и человек.Они определены следующим образом:

class Person < ActiveRecord::Base
belongs_to :chatsession
end


class Chatsession < ActiveRecord::Base
has_many :people
belongs_to :leader, :class_name => "Person"
end

Лидер по сути является главным человеком для этого конкретного сеанса чата.Теперь из моего приложения для iPhone я хочу иметь возможность создавать Chatsession с лидером за один вызов (обычно сетевые вызовы на iPhone стоят дорого, и поэтому я хочу избежать создания объекта Person, а затем объекта сеанса).

Возможный запрос JSON может выглядеть следующим образом:

{"chatsession": {"leader": {"name":"mary","device_id":"1111"}}}

На моем контроллере chatsession в методе create я хочу иметь возможность использовать этот JSON и создать как новый объект сеанса чата, так и связанный с нимобъект person.

Соответствующий код для этого будет:

class ChatsessionController < ApplicationController
     def create
         @chatsession = Chatsession.new(params[:chatsession])   
     end

В моем функциональном тесте он работает со следующим кодом:

 test "should create session" do
       # people(:one) is retrieving from a fixture
       post :create, :chatsession => { :leader => people(:one) }
       assert_response :success
 end

Это прекрасно работает,Но создать эквивалент JSON, похоже, не работает.Он ожидает какой-то объект Person, и я не знаю, как это представить.Я рассмотрел следующий способ решения проблемы:

http://www.rogue -development.com / blog2 / 2009/05 / creation-nested-objects-with-json-in-rails /

Это лучшее решение или я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 20 августа 2010

Пост выглядит для меня отличным решением.

С какой частью у вас возникли проблемы?

Rails 2.1 и более поздних версий автоматически обрабатывает входящие запросы JSON.Просто убедитесь, что ваше приложение для iPhone устанавливает тип пантомимы на json.См. post , где также обсуждается тестирование входящего JSON в сообщениях.

1 голос
/ 20 августа 2010

Пара указателей:

  • Убедитесь, что для заголовка «Content-Type» и «Accept» установлено значение «application / json».Проверьте это, просматривая / записывая ваши параметры;если они все настроены правильно, вы можете идти.

  • Я думаю, что вы хотите иметь accepts_nested_attributes_for :leader в сеансе чата.

  • Возможно, вам придется обойти токен аутентификации;Ваш iPhone не будет отправлять его, и по умолчанию rails ищет его в операциях post / put.

Но ваши настройки и мышление выглядят хорошо.

...