J'ai une situation complexe. Je construis une application iPhone avec un backend de rails. Il existe deux objets de modèle, une session de discussion et une personne. Ils sont définis comme suit:Création d'une requête JSON imbriquée avec Rails
class Person < ActiveRecord::Base
belongs_to :chatsession
end
class Chatsession < ActiveRecord::Base
has_many :people
belongs_to :leader, :class_name => "Person"
end
Le leader est essentiellement la personne principale pour cette session de conversation spécifique. Maintenant, depuis mon application iPhone, je veux pouvoir créer un Chatsession avec le leader en un seul appel (les appels réseau sont généralement chers sur l'iPhone et je veux donc éviter de créer un objet Person puis un objet session).
Une éventuelle demande JSON pourrait ressembler à:
{"chatsession": {"leader": {"name":"mary","device_id":"1111"}}}
Sur mon contrôleur de chatsession dans la méthode créer je veux pouvoir aspirer dans ce JSON et avoir créer à la fois un nouvel objet de la session de chat et associés objet personne.
Le code pertinent pour ce faire serait:
class ChatsessionController < ApplicationController
def create
@chatsession = Chatsession.new(params[:chatsession])
end
Dans mon test fonctionnel, il fonctionne avec le code suivant:
test "should create session" do
# people(:one) is retrieving from a fixture
post :create, :chatsession => { :leader => people(:one) }
assert_response :success
end
Cela fonctionne très bien. Mais créer l'équivalent json ne semble pas fonctionner. Il attend une sorte d'objet Person et je ne sais pas comment le représenter. J'ai regardé la manière suivante de résoudre le problème.
http://www.rogue-development.com/blog2/2009/05/creating-nested-objects-with-json-in-rails/
Est-ce la meilleure solution ou suis-je manque quelque chose?
Merci pour ce lien. J'ai fini par prendre ces suggestions et cela fonctionne bien. J'essayais d'éviter d'utiliser les attributes_nested_attributes car je voulais essayer de faire fonctionner mes choses avec objectiveresouce (un port iphone actifesource). Il ne semble pas que objectiveresource gère l'imbrication de toute façon, donc je vais simplement lancer ma propre sérialisation JSON. Merci! – Ish
Content de t'aider. Cordialement. –