Rails `link_to` с параметром` method` дает 404 при открытии в новой вкладке - PullRequest
1 голос
/ 14 января 2020

Использование Ruby 2.5.1 / Rails 5.2.4.1 Я создал новое приложение Rails и отредактировал / создал следующие файлы:

# 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 %>

Если я нажму эту ссылку как правило, он делает запрос POST и дает успешный ответ (204), как и ожидалось.

Если я щелкну, чтобы открыть его на новой вкладке (средний щелчок / щелчок правой кнопкой мыши и «Открыть ссылку на новой вкладке») , он делает запрос GET и выдает 404 / RoutingError.

Это различное поведение в зависимости от того, как я открываю (что пользователь считает по умолчанию) нормальной ссылкой, кажется удивительным - это ожидаемое поведение? Я предполагаю, что это как-то связано с этой ссылкой, использующей Rails U JS, и это ведет себя иначе, когда открывается новая вкладка? Как лучше всего в Rails получить (как выглядит) ссылку, которая создает POST, независимо от того, как он открывается?

1 Ответ

1 голос
/ 14 января 2020

щелчок правой кнопкой мыши и «Открыть ссылку в новой вкладке» аналогичны копированию ссылки и вставке в новую вкладку. Поэтому он действует как метод get. Поскольку вы принимаете только пост-метод, возникает ошибка RoutingError.

btw, вы можете использовать target = '_ blank', если хотите открыть пост-ссылку в новой вкладке.

...