如何在控制器中设置自定义方法的路径?

时间:2014-01-08 18:02:35

标签: ruby-on-rails ruby routes

我创建(读取生成)脚手架。在同一个生成的控制器中,我定义了一个自定义方法,它只在控制台中执行puts命令。我怎么称呼这种方法?我在哪里设置相关方法的路线?我正在尝试使用ajax调用调用该方法,但我一直在找不到Resource(404)。

路线:

 resources :projects do
    collection do
      put 'export_excel'
    end
  end

控制器:

def export_excel
    puts 'yay from controller'
end

前端:

exportExcel: function(){
            $.ajax({
                type: "POST",
                url: "/projects/export_excel",
                async: false,
                success: function(){
                    console.log('yay!');
                },
                error: function(){
                    console.log('nay!');
                }
            });
        }

2 个答案:

答案 0 :(得分:2)

您的自定义方法是对所有记录AKA collection还是单个记录member

进行操作

在路线中,您可以通过为resources定义

提供一个块来添加自定义方法
 resources :models  do 
     collection  do  
        get 'custom_method' 
     end
  end 


 resources :models  do 
     member  do  
        post 'custom_method' 
     end
  end 

请参阅http://guides.rubyonrails.org/routing.html#adding-more-restful-actions了解详情

基于评论/更新

resources :projects do 
  collection do 
     get 'export_excel', as: :export
  end
end 
     
exportExcel: function(){
            $.ajax({
                type: "GET",
                url: "/projects/export_excel",
                async: false,
                success: function(){
                    console.log('yay!');
                },
                error: function(){
                    console.log('nay!');
                }
            });
        }

由于http动词需要匹配,(在你的ajax中有POST,路由有PUT)。我认为两者都应该是GET。但无论他们需要匹配

你也不能在控制器内部使用puts,你需要使用Rails Logger,或者将某些内容渲染回浏览器,例如

def export_excel
    render text: 'yay from controller'
end

答案 1 :(得分:1)

在config / routes.rb中为

添加新控制器方法的路由。

示例:在config / routes.rb

resources :users do 
    collection do
       put 'new_method_name'
   end 
end