respond_with没有在轨道上的ruby工作.为什么?

Mat*_*one 6 ruby api json ruby-on-rails

我有一个名为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
Run Code Online (Sandbox Code Playgroud)

出于某种原因,respond_with调用始终失败并显示以下错误:

undefined method `model_name' for NilClass:Class
Run Code Online (Sandbox Code Playgroud)

如果我将respond_with调用更改为更简单的东西,我仍然会收到错误,例如:

respond_with "hello"
Run Code Online (Sandbox Code Playgroud)

产生此错误:

undefined method `hello_url' for #<GameController:0x1035a6730>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么??我只想向他们发送一个JSON对象!

PS,我的路线文件看起来像这样:

  match 'join' => 'game#join', :via => :post
Run Code Online (Sandbox Code Playgroud)

tjw*_*ace 7

我相信这些respond_with方法要求您将resource(@p)作为参数传递.以下是该方法的一些文档.

试试这个:

respond_with @p, :only => [:uuid]
Run Code Online (Sandbox Code Playgroud)

你也可以这样渲染json:

render :json => { :uuid => @p.uuid }
Run Code Online (Sandbox Code Playgroud)

  • 我实际上最终使用了render:json,这在一致的基础上运行得更好. (2认同)