我创建(读取生成)脚手架。在同一个生成的控制器中,我定义了一个自定义方法,它只在控制台中执行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!');
}
});
}
答案 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
中resources :users do
collection do
put 'new_method_name'
end
end