[英]How do I specify a custom POST action when using `match` in my `routes.rb` file?
我正在尝试在控制器中定义自定义post
操作,但是我有一些疑问。
这是我的控制器:
module Api
module V1
class ExamplesController < ApplicationController
def create_a
...
end
def create_b
...
end
end
end
end
我希望两种操作/方法都可以是post
操作。 这是我的路线文件中的内容:
namespace :api do
namespace :v1 do
match 'examples/create_a', :controller => 'examples', :action => 'create_a'
match 'examples/create_b', :controller => 'examples', :action => 'create_b'
end
end
我可以通过ge
t请求来实现这两种方法,但是我想根据http post
触发它们。 另外,如果我通过rake routes
检查,它不会告诉我它是否是GET,PUT,POST等方法。 它只是空白。 我如何告诉路由它应该是post
方法?
我的方法在浏览器中的post
请求看起来如何?
url: http://localhost:3000/api/v1/examples/create_a.json/create_a
header: Content-Type: application/x-www-form-urlencoded
data: paramA=45¶mB¶mC
这是在我的控制器操作create_a
post
的正确URL模式吗?
添加:via =>:post应该可以解决问题。
namespace :api do
namespace :v1 do
match 'examples/create_a', :controller => 'examples', :action => 'create_a', :via => :post
match 'examples/create_b', :controller => 'examples', :action => 'create_b', :via => :post
end
end
通常,当您要将某种逻辑名映射到RESTful路由和/或为RESTful路由创建别名时,可以使用match
。 您在进行match
所做的一切都很好(从某种意义上说,它将起作用),但是您只是缺少了一件小东西(以后我会告诉您)。
首先,让我们看一下match
为路由创建别名的典型用法:
match "profile" => "users#show"
此路由使您可以使用/profile
的应用程序路径来show
user
而不是/users/:id
路径。
由于您的代码没有将一个名称映射到另一个名称,因此您不需要match
规则。 使用match
会不必要地在代码match
添加重复项,并且在显示的情况下使用match
比需要的更为冗长。 这是一个示例,说明如何编写不带 match
的API路由,指定它们只能通过post
进行访问:
namespace :api do
namespace :v1 do
post "examples/create_a"
post "examples/create_b"
end
end
这是一个带有 match
的示例,添加:via
参数(这是您在代码示例中所缺少的)以指定HTTP动词:
namespace :api do
namespace :v1 do
match 'examples/create_a' => "examples#create_a", :via => :post
match 'examples/create_b' => "examples#create_b", :via => :post
end # ^ ---- DUPLICATION ---- ^
end
注意这里的代码重复。 既然你不是一个映射路径名到另一个较非当你输入你的两次相同名称的路径 match
的版本。
您还将注意到,与原始示例代码相比,我删除了:controller
和action
参数,因为当您使用表单时,Rails会自动推断出这一点:
"[controller]/[action]" => "[controller]#[action]"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.