让 form_with 不生成任何 id 的原因是什么?

问题描述

form_with 助手不会为表单元素生成 id,因此也不会生成 for 属性。这与旧的 form_tagform_for 助手不同。

如果您想使用 form_with 而不是已弃用的 form_tagform_for 助手,但您希望生成 id,您需要将其添加到您的配置中:

config.action_view.form_with_generates_ids = true

id 生成在某些情况下很有用,因为某些前端可能需要它。最重要的是,在我看来,不生成 for 属性意味着使用 form_with 生成的表单的 a11y 更少。

我目前正在使用需要表单元素 id 的旧代码库,我的下意识反应是启用上述配置设置,以便我可以使用 form_with 而无需手动为每个元素设置 ID。

认情况下使 form_with 不生成 ids 的原因是什么?我担心我在这里遗漏了一些东西,因为我认为做出这个决定是有充分理由的。

解决方法

从 Rails 5.2 开始,实际上 是默认设置:

config.action_view.form_with_generates_ids = true

您可以在 release notes 中看到它,以及改变它的 commit。来自该提交的描述:

form_with 被引入时,我们禁用了自动 form_for 中启用的 ID 生成。这通常 不是一个好主意,因为标签在输入时不起作用 没有 id 并且使用 Capybara 进行测试变得更加困难。 您仍然可以禁用自动生成 ids 设置 config.action_view.form_with_generates_idsfalse.

你似乎没有遗漏任何东西 :D

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...