Rails form_with 默认方法不正确

Rails form_with defaulting to incorrect method

我正在使用 Rails 6. 我有一个定义获取请求的路由:

namespace :admin do
    get '/machines/search', to: 'machines#search', as: 'search_machines'
end

然后,我有一个 form_withurl 设置为 route。加载表单时,为表单生成的 HTML 包含 method="post" 而不是 method="get" 这是我所期望的,因为路由是 GET 请求而不是 POST。我可以将 method: "get" 参数添加到 form_with,这解决了问题,但我不明白为什么 Rails 最初没有选择正确的方法。

<%= form_with url: admin_search_machines_path() do |i| %>
    <%= i.text_field :q, placeholder: "Search", autocomplete: "off", class: "debounce-form-submit form-control" %>
<% end %> 

根据 documentation form_with does default to POST if method is not specified. Which is not 100% correct, as it will switch to PATCH (via hidden field trick) if the model is persisted (source).

直到今天,代码没有查看路由本身来指定 method

不过,我认为您建议的(向后不兼容的)automagic 并没有完全关闭。您可能会在 rubyonrails forums 中询问这个问题,并获得反馈这是否是一个受欢迎的更改。就个人而言,我从没想过它会检查路线。此外,您可能使用 postget 方法使用相同的路由,这会使查找比第一眼看到的更复杂。