2010-12-16 12 views
6

Mam metody POST nazwie dołączyć które powinien wykonać następujące czynności: 1) utworzyć nowy obiekt 2) odpowiedzieć obiekt JSONreply_with nie działa w ruby ​​na szynach. Czemu?

Oto mój kod:

class GameController < ApplicationController 

    respond_to :json 

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

Z jakiegoś powodu, wywołanie respond_with zawsze kończy się niepowodzeniem z tego błędu:

undefined method `model_name' for NilClass:Class 

Jeśli zmienię wywołanie respond_with do czegoś prostsze nadal pojawiają się błędy, na przykład:

respond_with "hello" 

daje ten błąd:

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

Co robię źle ?? Chcę tylko wysłać im obiekt JSON!

PS, mój plik trasy wygląda następująco:

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

Lepiej wodowania 'respond_with' i tylko za pomocą zwykłego starych 'format.json {render: json}' itp. jeśli chcesz odejść od standardowych działań kontrolera. – zetetic

+0

Dokładnie to zrobiłem :-) –

Odpowiedz

7

wierzę metody respond_with wymaga, aby przejść do zasobu (@p) jako argument. Oto some documentation for the method.

Spróbuj tego:

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

Można również renderowanie JSON tak:

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

Tak naprawdę skończyło się na renderowaniu: json, działało to znacznie lepiej w sposób ciągły. –

+0

również zakończyłem korzystanie z json, aby rozwiązać ten problem, dzięki. – botbot

4

również będzie działać respond_with {:uuid => @p.uuid}, :location => nil

Powiązane problemy