我试图在Rails中设置一个级联选择框。我使用dynamic-select-boxes作为示例。出于某种原因,我无法让它正常工作。当我在下拉菜单中进行新选择时,WEBrick会显示ActiveRecord的404 Not Found错误。
确切的错误是:
Started GET "/estimates/update_areas?product_type_id=1&_=1446822835903" for 50.17.182.190 at 2015-11-06 16:05:23 +0000
Cannot render console from 50.17.182.190! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by EstimatesController#show as JS
Parameters: {"product_type_id"=>"1", "_"=>"1446822835903", "id"=>"update_areas"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."name" ASC LIMIT 1 [["id", 1]]
Estimate Load (0.3ms) SELECT "estimates".* FROM "estimates" WHERE "estimates"."id" = $1 ORDER BY "estimates"."updated_at" DESC LIMIT 1 [["id", 0]]
Completed 404 Not Found in 4ms (ActiveRecord: 0.6ms)
ActiveRecord::RecordNotFound (Couldn't find Estimate with 'id'=update_areas):
app/controllers/estimates_controller.rb:9:in `show'
由于某种原因,请求被发送到' show'在我的控制器中的方法,我无法弄清楚为什么。
我的estimate_controller.rb中的update_areas方法:
def update_areas
@areas = Area.where("product_type_id = ?", params[:product_type_id])
respond_to do |format|
format.js
end
end
相关路线是:
resources :estimates
get 'estimates/new/update_areas', to: 'estimates#update_areas'
我的估计.js.coffee
$ ->
$(document).on 'change', '#product_type_select', (evt) ->
$.ajax 'update_areas',
type: 'GET'
dataType: 'script'
data: {
product_type_id: $("#product_type_select option:selected").val()
}
error: (jqXHR, textStatus, errorThrown) ->
console.log("AJAX Error: #{textStatus}")
success: (data, textStatus, jqXHR) ->
console.log("Dynamic area select OK!")
和我的update_areas.js.coffee
$("#areas_select").empty().append("<%= escape_javascript(render(:partial => @areas)) %>")
知道为什么ajax请求被路由到错误的路由了吗?
更新1 好吧,我还没有解决这个问题,但我想我会补充更多信息。我在路线文件中注释了资源:估算行,并将 get&#39; estimate / update_areas /&#39;行留给:&#39;估计#update_areas&#路径文件中的39; ,一切都按预期工作。只要我取消评估估算资源,就会失败。
在估计资源未注释的情况下,我会得到像
这样的行Parameters: {"product_type_id"=>"1", "_"=>"1447260557304", "id"=>"update_areas"}
WEBrick中的。没有我得到的资源
Parameters: {"product_type_id"=>"2", "_"=>"1447260557305"
这是我的期望。为什么,当我在路由文件中添加资源行时,突然传递了一个ID参数?
答案 0 :(得分:0)
好的,我终于有了这个工作。
在我的routes.rb中,估算资源变为:
resources :estimates do
get 'update_areas', on: :new
end
和我的估计.js.coffee成了:
$ ->
$(document).on 'change', '#product_type_select', (evt) ->
$.ajax
url:'/estimates/new/update_areas',
type: 'GET',
dataType: 'script',
data: {
product_type_id: $("#product_type_select option:selected").val()
}
error: (jqXHR, textStatus, errorThrown) ->
console.log("AJAX Error: #{textStatus} #{errorThrown}")
success: (data, textStatus, jqXHR) ->
console.log("Dynamic area select OK!")
这接受了适当的参数并更新了目标选择框。希望有一天能帮到别人。