2014-02-18 6 views
2

Я не могу понять разницу между ними. Может кто-нибудь объяснить разницу при использовании form_for?Rails collection_select vs f.collection_select

Скажем у вас есть это: <%= form_for(@post) do |f| %>

ПРИМЕРЫ Когда вы используете это?

<%= 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

The 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 объект имеет обратную ссылку на Вы перешлите код в form_for через f.object. Вот как это известно, чтобы позвонить collection_select(:post, ...) под капотом.

Смежные вопросы