在Rails中,即使我在config / routes.rb中配置了路由,我的RESTful路由也会抛出404

时间:2016-06-27 21:20:49

标签: ruby-on-rails-4 routes config restful-url

我正在使用Rails 4.2.3。我有一个带有一种方法的控制器

class CountriesController < ApplicationController

   def states
      @country = Country.find params[:country_id]
      @states = @country.states
      respond_to do |format|
         format.json { render json: @states.to_json }
      end
   end

end

在我的config / routes.rb文件中,我设置了

resources :countries do
    get :state, on: :member #-> url.com/countries/:country_id/states/
end

但是,当我访问网址时

http://mydomein.devbox.com:3000/countries/38/states

我得到了404.我还需要做些什么才能让它发挥作用?

编辑:我编辑了我的coffeescript以匹配建议(添加内容类型),但这仍然会导致404 ...

@update_states = (countryElt, stateElt) ->
   url = "/countries/" + $(countryElt).val() + "/states"
   $.ajax
     url: url
     type: 'GET'
     contentType: 'application/json'
     success: (data) ->
       for key, value of data
         $(stateElt).find('option').remove().end()
         $(stateElt).append('<option value=' + key + '>' + value + '</option>')

1 个答案:

答案 0 :(得分:0)

您的服务器无法找到路由,因为未正确写入控制器和/或请求。

首先,当触摸rails中的config/routes.rb时,您需要重新启动服务器(您可以将此规则应用于配置文件夹中的所有已修改文件)。

修改

其次,您的resources功能不正确,请尝试以下操作:

resources :countries do
     get :states # >> url.com/countries/:country_id/states
end

使用您当前的配置,您的服务器正在寻找countries#state操作,但您的控制器/操作名为countries#states

END OF EDIT

其次,您的请求与您的控制器不匹配。您正在编写HTML响应请求,但您的控制器只响应json。尝试在请求中设置'Content-Type': 'application/json'标头,或直接在请求中写入格式:http://your-url.com/countries/38/states.json

如果您还需要HTML格式的响应,则需要将此格式添加到控制器方法中:

class CountriesController < ApplicationController

  def states
    @country = Country.find params[:country_id]
    @states = @country.states
    respond_to do |format|
      format.html # if your views were generated you may not need to specify a template or its variables
      format.json { render json: @states.to_json }
    end
  end
end

使用此服务器将找到两个路由(html和json)。您的原始网址应该可以使用!