Rails collection_select vs f.collection_select

时间:2014-02-18 20:44:39

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

我无法理解两者之间的区别。有人可以解释使用form_for时的区别吗?

说你有这个:<%= form_for(@post) do |f| %>

示例 - 您何时会使用此功能?

<%= collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true) %>

VS。用这个?

<%= f.collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true) %>

Rails Api

1 个答案:

答案 0 :(得分:3)

当您使用f.some_form_helper时,帮助程序已经知道您要为其创建字段名称的模型的名称。这样您就可以删除:post参数。 form_for(@post)为您提供f表单构建器对象,该对象知道表单的用途。

使用常规collection_select(或任何其他具有f.的帮助程序),您必须作为第一个参数传入该字段所针对的模型的名称。

你的例子有点过了,因为你向两者传递了相同的参数。 f.collection_select不需要:post

这是正确使用 f.帮助程序:

<%= collection_select(:post, :author_id, Author.all, :id, :name_with_initial, prompt: true) %>

这是使用f.帮助程序的更正方法:

<%= f.collection_select(:author_id, Author.all, :id, :name_with_initial, prompt: true) %>

f对象的引用将返回到您通过form_for传递给f.object的模型。这就是它如何知道在引擎盖下呼叫collection_select(:post, ...)