对于以下情况,如何从
form_for
转换为 form_with
:
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %>
我浏览了 Rails 的
form_with
文档,但没有找到任何相关示例。
谢谢!
form_with
具有 scope:
选项,可更改输入名称前缀、id 和标签的 for 属性。据我所知,它与 as:
的 form_for
选项完全相同。
- 输入字段名称前缀的范围以及如何 提交的参数分组在控制器中。:scope
# Adding a scope prefixes the input field names: <%= form_with scope: :post, url: posts_path do |form| %> <%= form.text_field :title %> <% end %> # => <form action="/posts" method="post" data-remote="true"> <input type="text" name="post[title]"> </form>
https://api.rubyonrails.org/v6.0.0/classes/ActionView/Helpers/FormHelper.html#method-i-form_with
所以等效的调用是:
<%= form_with(
model: resource,
scope: resource_name,
url: password_path(resource_name),
method: :post
) do |f| %>
尝试
= form_with model: resource, scope: resource_name,
url: password_path(resource_name), method: :post do |f|
另外
form_with
不会为元素生成类和ID,如果您需要这些 - 手动添加它们
api 中的文档比目前指南中的详细得多。
as: resource_name
和
html: { method: :post }
。只需使用
model: resource
中的
form_with
即可开始。根据
文档:
但是由于 Devise 使用不同的辅助方法(在本例中
model
推断 URL 和范围。所以,用这个
<%= form_with model: Post.new do |form| %> ... <% end %>
相当于:
<%= form_with scope: :post, url: posts_path do |form| %> ... <% end %>
password_path
)来生成特定的 URL。您只需使用
url:
选项以及
model:
中的
form_with
,如下所示:
<%= form_with(model: resource, url: password_path(resource_name)) do |form| %>
将生成类似以下内容:
<form action="/users/password" accept-charset="UTF-8" method="post">