response_with没有在轨道上的ruby工作。为什么?

时间:2010-12-16 04:07:52

标签: ruby-on-rails ruby json api

我有一个名为join的post方法,应该执行以下操作: 1)创建一个新对象 2)用json对象响应

这是我的代码:

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

2 个答案:

答案 0 :(得分:7)

我相信respond_with方法要求您将资源(@p)作为参数传递。这是some documentation for the method

试试这个:

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

你也可以像这样渲染json:

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

答案 1 :(得分:4)

也可以respond_with {:uuid => @p.uuid}, :location => nil