2010-12-16 142 views
6

我有一個名爲POST方法加入應該做到以下幾點: 1)創建一個新的對象 2)用JSON對象respond_with在紅寶石軌道上不工作。爲什麼?

這裏迴應是我的代碼:

class GameController < ApplicationController 

    respond_to :json 

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

出於某種原因,在respond_with調用始終失敗,此錯誤:

undefined method `model_name' for NilClass:Class 

如果我改變respond_with調用更簡單的東西我仍然得到錯誤,如:

respond_with "hello" 

產生這樣的錯誤:

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

我在做什麼錯?我只想給他們發回一個JSON對象!

PS,我的路由文件看起來像這樣:

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

你最好開溝'respond_with',只是使用普通的舊'format.json {render:json}'等等,如果你想脫離標準的控制器動作。 – zetetic 2010-12-16 06:21:40

+0

這正是我最終做的:-) – 2010-12-16 16:35:02

回答

7

我相信respond_with方法需要你的資源(@p)作爲參數傳遞。這裏是some documentation for the method

試試這個:

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

你也可以渲染JSON是這樣的:

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

我實際上最終使用了render:json,這在一致的基礎上工作得更好。 – 2010-12-16 16:34:45

+0

我也結束了使用json來解決這個問題,謝謝。 – botbot 2012-07-01 23:47:05

4

也將工作respond_with {:uuid => @p.uuid}, :location => nil