ruby on rails jquery没有调用正确的控制器动作

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

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

这是js

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

编辑:这是为我工作的js代码,谢谢罗宾的答案如下:

  $(function(){ $('.menu_class').bind('change', function(){ $.ajax({ url: "", data: { param_one: $(this).val() } }); }); });  

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

 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 

耙路线给了我这个

 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应该是

  

你的路线:

 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 
 $.ajax('#{:controller => "my_tests", :action => "get_results"}?param_one=' + $(this).val()); 

由于该片段中没有ERB,因此上面只是JS中的普通字符串。 它将构建一个URL,如:

 http://example.com/the_current_page#{:controller => "my_tests", :action => .... 

#之后的URL部分将不会被发送到服务器。 在网络面板中查看它,应该清楚发生了什么。