【问题标题】:Migrating from `form_for` over to the new `form_with`从 `form_for` 迁移到新的 `form_with`
【发布时间】:2020-01-23 13:50:32
【问题描述】:

如何将form_for 转换为form_with 以获取以下内容:

<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %>

我查看了 Rails 的 form_with 文档,但没有找到任何相关示例。

谢谢!

【问题讨论】:

  • 你可以在这里找到很多例子:guides.rubyonrails.org/…
  • 在 Rails 5.1 中引入 form_with 之前,它的功能曾经在 form_tag 和 form_for 之间分离。两者现在都已被软弃用。 无论代码与 form_for 一起使用,都应该与 form_with 一起使用
  • 我知道@Thang,但是它们的语法有点不同。

标签: ruby-on-rails devise form-for


【解决方案1】:

form_with 具有 scope: 选项,可更改输入名称前缀、ID 和标签的 for 属性。据我所知,它与form_foras: 选项完全相同。

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

【讨论】:

    【解决方案2】:

    试试

    = form_with model: resource, scope: resource_name,
                url: password_path(resource_name), method: :post do |f|
    
    

    form_with 也不会为元素生成类和 ID,如果您需要这些 - 手动添加它们

    文档in api 比目前的指南详细得多。

    【讨论】:

    • 您缺少as: resource_name 选项。我猜这是来自 Devise,它使用它来使表单键通用,而不是从模型中获取键。
    • 感谢您的意见@max 确实,这正是我找不到任何示例的部分。干杯!
    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2011-06-16
    相关资源
    最近更新 更多