相关疑难解决方法(0)

Rails response_with在索引和创建方法上的行为不同

我在Rails 3.1中构建一个简单的json API.我创建了一个具有两个功能的控制器:

class Api::DogsController < ActionController::Base
  respond_to :json, :xml
  def index
    respond_with({:msg => "success"})
  end

  def create
    respond_with({:msg => "success"})
  end
end
Run Code Online (Sandbox Code Playgroud)

在routes.rb我有

namespace :api do 
  resources :dogs
end
Run Code Online (Sandbox Code Playgroud)

当我向http:// localhost:3000/api/dogs发出get请求时,我从上面得到了正确的json.当我对同一个网址发帖时,我得到了一个rails例外:

ArgumentError in Api::DogsController#create
Nil location provided. Can't build URI.
actionpack (3.1.0) lib/action_dispatch/routing/polymorphic_routes.rb:183:in `build_named_route_call`
actionpack (3.1.0) lib/action_dispatch/routing/polymorphic_routes.rb:120:in `polymorphic_url'
actionpack (3.1.0) lib/action_dispatch/routing/url_for.rb:145:in `url_for'
Run Code Online (Sandbox Code Playgroud)

但是,如果我将创建代码更改为

def create
  respond_with do |format|
    format.json { render :json => {:msg => "success"}}
  end
end
Run Code Online (Sandbox Code Playgroud)

它返回json就好了.

有人能解释一下这里发生了什么吗?

ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

16
推荐指数
1
解决办法
7382
查看次数