我无法理解两者之间的区别。有人可以解释使用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) %>
答案 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, ...)
。