2010-12-16 66 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