Rails 带有 `method` 参数的 `link_to` 在新标签页中打开时给出 404
Rails `link_to` with `method` parameter gives 404 when open in new tab
使用 Ruby 2.5.1/Rails 5.2.4.1 我生成了一个新的 Rails 应用程序和 edited/created 以下文件:
# config/routes.rb
Rails.application.routes.draw do
root 'some#home'
post 'foo' => 'some#foo'
end
# app/controllers/some_controller.rb
class SomeController < ApplicationController
def foo; end
end
# app/views/some/home.html.erb
<%= link_to 'Do stuff', foo_path, method: :post %>
如果我正常单击此 link,它会按预期发出 POST 请求并给出成功响应 (204)。
如果我在新选项卡中单击打开它(中间 click/right 单击和 'Open link in new tab'),它会发出 GET 请求并给出 404/RoutingError。
这种不同的行为取决于我打开的方式(默认情况下显示给用户的是什么)正常 link 似乎令人惊讶 - 这是预期的行为吗?我猜这与使用 Rails UJS 的 link 有关,并且在打开新选项卡时表现不同?在 Rails 中获得(看起来像)一个 link 的最佳方法是什么,无论它是如何打开的?
右键单击 'Open link in new tab' 就像复制 link 并粘贴到新选项卡中一样。因此它充当一个获取方法。
由于您只接受 post-method,因此会发生 RoutingError。
顺便说一句,如果你想在新标签页中打开 post-link,你可以使用 target='_blank'。
使用 Ruby 2.5.1/Rails 5.2.4.1 我生成了一个新的 Rails 应用程序和 edited/created 以下文件:
# config/routes.rb
Rails.application.routes.draw do
root 'some#home'
post 'foo' => 'some#foo'
end
# app/controllers/some_controller.rb
class SomeController < ApplicationController
def foo; end
end
# app/views/some/home.html.erb
<%= link_to 'Do stuff', foo_path, method: :post %>
如果我正常单击此 link,它会按预期发出 POST 请求并给出成功响应 (204)。
如果我在新选项卡中单击打开它(中间 click/right 单击和 'Open link in new tab'),它会发出 GET 请求并给出 404/RoutingError。
这种不同的行为取决于我打开的方式(默认情况下显示给用户的是什么)正常 link 似乎令人惊讶 - 这是预期的行为吗?我猜这与使用 Rails UJS 的 link 有关,并且在打开新选项卡时表现不同?在 Rails 中获得(看起来像)一个 link 的最佳方法是什么,无论它是如何打开的?
右键单击 'Open link in new tab' 就像复制 link 并粘贴到新选项卡中一样。因此它充当一个获取方法。
由于您只接受 post-method,因此会发生 RoutingError。
顺便说一句,如果你想在新标签页中打开 post-link,你可以使用 target='_blank'。