javascript - ruby on Rails jquery 未调用正确的 Controller 操作

标签 javascript jquery ruby-on-rails routes

我阅读了当我开始发布此问题时出现的所有答案,但它们似乎并没有解决我的问题。

我向我的 Controller 添加了一个名为 get_results 的新操作(除了通过脚手架创建的操作之外),但每次我更改选择菜单中的选项时,它都会指示我“编辑”操作,而不是“get_results” ”,

这是js

<script type="text/JavaScript">
$(function(){
  $('.menu_class').bind('change', function(){
      $.ajax('#{:controller => "my_tests", :action => "get_results"}?param_one=' + $(this).val());
  });
});
</script>

编辑:这是对我有用的js代码,感谢下面罗宾的回答:

<script type="text/JavaScript">
$(function(){
  $('.menu_class').bind('change', function(){
    $.ajax({
      url: "<%= get_results_my_tests_url %>",
      data: {
        param_one: $(this).val()
      }
    });
  });
});
</script>

这是我添加的操作(片段)

def get_results

  # some stuff goes here

  respond_to do |format|
    if @my_test.update_attributes(params[:my_test])
      format.html
      format.js
    else
      format.html { render :action => "update" }
      format.json { render :json => @my_test.errors, :status => :unprocessable_entity }
    end
  end
end

我在我的routes.rb中添加了一条特定的路线

MyTests::Application.routes.draw do

  resources :my_tests
  get "home/index"
  match '/my_tests/get_results' => 'my_tests#get_results', :as => :get_results
  match ':controller(/:action(/:id(.:format)))'
  root :to => 'home#index'
end

编辑:这是对我有用的路由配置,感谢下面罗宾的回答:

resources :my_tests do
  collection do
    get :get_results
  end
end

rake 路线给了我这个

my_tests     GET    /my_tests(.:format)                    {:action=>"index", :controller=>"my_tests"}
             POST   /my_tests(.:format)                    {:action=>"create", :controller=>"my_tests"}
new_my_test  GET    /my_tests/new(.:format)                {:action=>"new", :controller=>"my_tests"}
edit_my_test GET    /my_tests/:id/edit(.:format)           {:action=>"edit", :controller=>"my_tests"}
my_test      GET    /my_tests/:id(.:format)                {:action=>"show", :controller=>"my_tests"}
             PUT    /my_tests/:id(.:format)                {:action=>"update", :controller=>"my_tests"}
             DELETE /my_tests/:id(.:format)                {:action=>"destroy", :controller=>"my_tests"}
home_index   GET    /home/index(.:format)                  {:action=>"index", :controller=>"home"}
get_results         /my_tests/get_results(.:format)        {:action=>"get_results", :controller=>"my_tests"}
                    /:controller(/:action(/:id(.:format)))
      root          /                                      {:action=>"index", :controller=>"home"}

那么为什么它总是引导我“编辑”操作而不是“get_results”?

最佳答案

试试这个:

你的 JavaScript 应该是

<script type="text/JavaScript">
    $(function(){
         $('.menu_class').bind('change', function(){
             $.ajax({
               url: "<%= get_results_my_tests_url %>",
               data: {
                   param_one: $(this).val()
               }
             });
         });
     });
</script>

您的路线:

resources :my_tests do
    # if "/my_tests/get_results" is really what you want
    collection do
        get :get_results
    end
    #if "/my_tests/1/get_results" is what you actually want
    #it would make more sense, especially because you have @my_test in the controller
    member do
        get :get_results
    end
end

关于javascript - ruby on Rails jquery 未调用正确的 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695867/

相关文章:

javascript - Netsuite - 无法为 itemreceipt 行项目设置 restock=T

javascript - 如何使用 PHP 通过 AJAX 上传文件?

ruby-on-rails - 你怎么写一个cancan的能力so can?和accessible_by 都在自引用HABTM 关系上工作?

javascript - 使用 javascript 进行简单的表单验证

javascript - 如何删除 javascript 对象(John Resig - 简单继承)?

javascript - 动态位置后的粘性标题

javascript - 如何在 x 秒后停止运行 Javascript 函数?

ruby-on-rails - 如何在不替换第一个哈希的情况下合并哈希的哈希

jquery - 验证检查带有单独提交按钮的动态文本框

javascript - 如何在react/flux中连接API调用