gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:00:53 25 4
gpt4 key购买 nike

虽然这通常违反我们的设计原则,但我们需要让 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com