Rails 4:ajax调用控制器操作返回404未找到

时间:2015-04-01 22:56:23

标签: javascript ruby-on-rails ruby ajax ruby-on-rails-4

好的,我喜欢1小时试图解决这个问题......

我在我的oferts_controller.rb中有这个动作

    def update_categories
     @categories = Category.children_of(Category.find(params[:categories]))
     respond_to do |format|
      format.js
     end
    end

这就是我在routes.rb中所拥有的。

get 'oferts/update_categories', as: 'update_categories'

这就是我在ajax调用中的内容

$ ->
  $(document).on 'change', '#categories_parents_select', (evt) ->
    $.ajax 'update_categories',
      type: 'GET'
      dataType: 'script'
      data: {
        categories: $("#categories_parents_select option:selected").val()
      }
      error: (jqXHR, textStatus, errorThrown) ->
        console.log("AJAX Error: #{textStatus}")
      success: (data, textStatus, jqXHR) ->
        console.log("Dynamic country select OK!")

更新了update_categories操作作为JavaScript响应,该应用程序位于app / views / oferts / update_categories.js.coffee中

$("#categories_select").empty()
  .append("<%= escape_javascript(render(:partial => @categories)) %>")

在我尝试执行ajax后,我在日志中得到了这个

Started GET "/oferts/update_categories?categories=3&_=1427927753744" for 127.0.0.1 at 2015-04-01 17:36:01 -0500
Processing by OfertsController#update_categories as JS
  Parameters: {"categories"=>"3", "_"=>"1427927753744"}
  Rendered public/404.html (0.6ms)
Completed 404 Not Found in 38ms (Views: 36.8ms | ActiveRecord: 0.0ms)

如果您发现它甚至没有进入控制器操作,我尝试在控制器的update_categories puts内添加def,但这些不会打印在日志中。这是路由问题吗?

谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

我曾经遇到过这个问题

最后,我发现问题出在过滤器

你的控制器中是否有任何文件管理器,你想发帖寻求帮助吗?

答案 1 :(得分:0)

即使没有任何验证或身份验证,也存在不允许控制器中的此类ajax方法通过的问题。您需要在控制器中查看 oferts_controller.rb或application_controller.rb 。必须有一些 before_filter ,而是将其重定向到404.

由于