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

What is the reasoning for having form_with not generate any ids?

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

如果你想使用 form_with 而不是弃用的 form_tagform_for 助手,但你想生成 ids,你需要将它添加到你的配置:

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, along with the commit 中看到它。根据该提交的描述:

When form_with was introduced we disabled the automatic generation of ids that was enabled in form_for. This usually is not an good idea since labels don't work when the input doesn't have an id and it made harder to test with Capybara. You can still disable the automatic generation of ids setting config.action_view.form_with_generates_ids to false.

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