长期以来,Railsmethod: :post
在 helper 中提供了一个选项link_to
:当给出选项时,Rails 会拦截点击并发出 POST 请求,而不是默认的 GET 请求。
然而,由于一些未知的原因,这在 Rails 7 中不起作用:尽管添加method: :post
到我的link_to
助手,Rails 发送了一个 GET 请求(不是一个 POST 请求)。我认为 Turbo 应该会处理它,但它似乎没有发生。
这是您可以复制的非常简单的步骤:
$ rails new example_app
$ bin/rails g scaffold Book title
$ bin/rails db:create && bin/rails db:migrate
$ echo "<%= link_to "New book", new_book_path, method: :post %>" >> app/views/books/index.html.erb
$ bin/rails s
现在localhost:3000/books
从您的网络浏览器访问,然后单击第二个“新书”链接。我希望得到一个错误(毕竟,我没有配置正确的 POST 路由),但不幸的是,Rails 发出 GET 请求 - 而不是 POST 请求,因为它应该有:
Started GET "/books/new" for ::1 at 2021-12-27 17:40:43 +0100
Processing by BooksController#new as HTML
Rendering layout layouts/application.html.erb
Rendering books/new.html.erb within layouts/application
Rendered books/_form.html.erb (Duration: 9.1ms | Allocations: 5216)
Rendered books/new.html.erb within layouts/application (Duration: 10.2ms | Allocations: 5594)
Rendered layout layouts/application.html.erb (Duration: 12.9ms | Allocations: 7759)
Completed 200 OK in 25ms (Views: 13.6ms | ActiveRecord: 4.3ms | Allocations: 12404)
为什么会这样?Turbo 不应该拦截链接,并且像 Rails UJS 过去所做的那样,发送 POST 请求吗?