ruby-on-rails - 资源丰富的路由,但使用 GET 而不是 POST 的 #create 操作

标签 ruby-on-rails routing

虽然这通常违反我们的设计原则,但我们需要让 Controller 执行它的 #create对 GET 请求的操作(它是涉及外部服务的一系列重定向的工作流的一部分)。有谁知道这样做的预期方法是什么?我真的不想跳出 Rails 路由提供的资源丰富的路由框架。我们不需要 #index通常会响应该 GET 请求的操作。

我发现(令人惊讶地)这是可行的,但我不知道它是否是有意的,或者我们是否会利用 Rails 中的错误并冒着稍后损坏的风险:

resources :agreements, :except => [:index, :create] do
  get :create, :on => :collection
end

如果那 get :createget :something ,我们会有一个像
Helper:  something_agreement_path
Request: GET /agreements/:agreement_id/something
Action:  agreements#something

但是 Rails 实际上生成了我们想要的:
Helper:  agreements_path
Request: GET /agreements
Action:  agreements#create

错误,还是功能?

最佳答案

我知道这可能不适用于最新的路由代码,但此链接包含大量有关 Rails 路由的信息。在 2.3 节中,它介绍了 RESTful 路由是如何构建的。

Rails Routing from the Inside Out

如果我要通过我在那里简要阅读的内容来猜测的话。默认的 REST 操作是手动分配给特定路由的。因此,当您将创建操作更改为使用 GET 时,它会在创建新记录之前已经创建了某种记录(路由散列)。

所以为了回答你的问题,我假设这种行为是基于 Rails 路由代码的内部工作原理。我认为这在 future 的某个时候总是有可能改变的。

关于ruby-on-rails - 资源丰富的路由,但使用 GET 而不是 POST 的 #create 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8118752/

相关文章:

angular - 如何从 Angular ActivatedRoute 获取参数

javascript - Rails 3.1 Ajax 问题

ruby-on-rails - (will_paginate) 查找记录所在的页面

ruby-on-rails - 追加 myjsfile.js?2342343 是否总是强制浏览器获取新的 .js 文件?

javascript - Rails 5 - Google map - Javascript 错误 - initMap 不是函数 - 修复一个 js 问题会产生另一个问题

ruby-on-rails - 具有 100% 宽度的 rails css 罗盘网格?

javascript - vue-router 总是创建一个新的组件实例

scala - Akka 问广播

javascript - Angular 2 : defining a Router on another Component than the bootstraped one

php - 模块与 Controller