ruby-on-rails - 在 `match` 文件中使用 `routes.rb` 时,如何指定自定义 POST 操作?

标签 ruby-on-rails api controller action

我正在尝试在 Controller 中定义自定义 post 操作,但我有一些问题。

这是我的 Controller :

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

我可以通过 get 请求访问这两个方法,但我想根据 http post 触发它们。另外,如果我通过 rake paths 检查,它不会告诉我它是否是 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&paramB&paramC

这是对我的 Controller 操作create_a执行post的正确URL模式吗?

最佳答案

当您想要将某种逻辑名称映射到 RESTful 路由和/或为 RESTful 路由创建别名时,通常会使用 match。您使用 match 所做的事情很好(从某种意义上说它会起作用),但您只是错过了一件小事(稍后我会告诉您)。

首先,让我们看一下 match 为路由创建别名的典型用法:

match "profile" => "users#show"

此路由允许您使用应用程序路径 /profile显示 用户,而不是路径 /users/: id.

由于您的代码并未将一个名称映射到另一个名称,因此您不需要 match 规则。您对 match 的使用会在代码中添加不必要的重复,并且在您提供的情况下使用 match 会比必要的更加冗长。以下示例说明了如何不使用 match 编写 API 路由,并指定只能通过 post 访问它们:

namespace :api do
  namespace :v1 do
    post "examples/create_a"
    post "examples/create_b"
  end
end

这是一个 with 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

请注意此处的重复代码。由于您没有将一个路径名映射到另一个路径名,因此与匹配版本相比,您已输入同名路径两次

您还会注意到,与您的原始示例代码相比,我取出了 :controlleraction 参数,因为当您使用形式:

"[controller]/[action]" => "[controller]#[action]"

关于ruby-on-rails - 在 `match` 文件中使用 `routes.rb` 时,如何指定自定义 POST 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12407549/

相关文章:

javascript - 带参数的 CakePHP Controller 函数不显示 javascript

ruby-on-rails - 如何正确制作 Mongoid 订单?

api - 有谁知道免费的邻里数据库?

ruby-on-rails - 如何在单元测试中伪造 recaptcha?

api - 保护移动应用程序上的第三方 API 调用

javascript - 使用 converse.js 以编程方式发送消息?

ruby - 未初始化常量

ruby-on-rails - 不通过授权(设计授权 token )

sql - Rails - 当用户来到我的页面时如何仅第一次运行方法

sql - 改进 rails 中的调度/预订 sql 查询