При использовании 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, ...)
под капотом.
The f. в общем случае используется для указания формы с связанным с ней объектом, в случае с тегом collection_select, он принимает объект так, чтобы f. не нужно, я думаю (вот почему я комментирую: P), это правильный ответ – maltray