2014-02-18 42 views
2

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

假设你有这样的:<%= form_for(@post) do |f| %>

Examples-当你使用它?

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

与使用?

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

Rails Api

+0

f。通常用于指示与其相关的对象的表单,在collection_select标记大小写中,它将对象作为f。不需要,我想(这就是为什么我要评论:P)这是正确的答案 – maltray

回答

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对象具有基准回你通过f.object传递给form_for的模型。这是如何知道在底层调用collection_select(:post, ...)