我正在使用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>')
答案 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)。您的原始网址应该可以使用!