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_with
将 url
设置为 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 中询问这个问题,并获得反馈这是否是一个受欢迎的更改。就个人而言,我从没想过它会检查路线。此外,您可能使用 post
和 get
方法使用相同的路由,这会使查找比第一眼看到的更复杂。
我正在使用 Rails 6. 我有一个定义获取请求的路由:
namespace :admin do
get '/machines/search', to: 'machines#search', as: 'search_machines'
end
然后,我有一个 form_with
将 url
设置为 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 中询问这个问题,并获得反馈这是否是一个受欢迎的更改。就个人而言,我从没想过它会检查路线。此外,您可能使用 post
和 get
方法使用相同的路由,这会使查找比第一眼看到的更复杂。