У меня сложная ситуация.Я создаю приложение для 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 /
Это лучшее решение или я что-то упустил?