2010-12-16 346 views
6

J'ai une méthode post appelé jointure qui devrait faire ce qui suit: 1) créer un nouvel objet 2) répondre avec un objet JSONrépond_with ne fonctionne pas en ruby ​​sur rails. Pourquoi?

Voici mon code:

class GameController < ApplicationController 

    respond_to :json 

    def join 
    @p = Player.new(:name => params[:name]) 
    @p.save! 
    respond_with({:uuid => @p.uuid}) 
    end 
end 

Pour une raison quelconque, l'appel respond_with échoue toujours avec cette erreur:

undefined method `model_name' for NilClass:Class 

Si je change l'appel respond_with à quelque chose plus simple que je reçois encore des erreurs, par exemple:

respond_with "hello" 

cède cette erreur:

undefined method `hello_url' for #<GameController:0x1035a6730> 

Qu'est-ce que je fais mal ?? Je veux juste leur renvoyer un objet JSON!

PS, mon fichier itinéraires ressemble à ceci:

match 'join' => 'game#join', :via => :post 
+1

Vous êtes mieux amerrissage 'respond_with' et juste en utilisant le bon vieux 'format.json {render: json}' etc. si vous voulez quitter les actions du contrôleur standard. – zetetic

+0

C'est exactement ce que j'ai fini par faire :-) –

Répondre

7

Je crois que les méthodes respond_with vous oblige à passer la ressource (@p) comme argument. Voici some documentation for the method.

Essayez ceci:

respond_with @p, :only => [:uuid] 

Vous pouvez également rendre JSON comme ceci:

render :json => { :uuid => @p.uuid } 
+2

J'ai fini par utiliser render: json, cela a fonctionné beaucoup mieux sur une base régulière. –

+0

J'ai aussi fini par utiliser JSON pour résoudre ce problème, merci. – botbot

4

fonctionne également respond_with {:uuid => @p.uuid}, :location => nil