В Rails FormTagHelper отсутствуют важные методы select и collection_select - PullRequest
1 голос
/ 02 марта 2010

Вы можете сделать это, когда используете form_for(@model...):

collection_select(:subscription, :duration, ["Some", "Values"], :to_s, :to_s, {:prompt => true})

А вывод выглядит примерно так:

<select id="subscription_duration" name="subscription[duration]">
    <option value="">Please select</option>
    <option value="Some">Some</option>
    <option value="Values">Values</option>
</select>

Если вы используете форму без модели, у вас не будет такого замечательного вспомогательного метода для создания тегов <option>. Вместо этого вы должны сделать это:

select_tag("subscription", '<option value="Some">Some</option><option value="Values">Values</option>')

FormHelper и FormOptionsHelper работают вместе на форме, обертывающей модель , и имеют select и collection_select сделать жизнь проще. Однако для простого form_tag (без модели) такого FormOptionsTagHelper не существует. FormTagHelper имеет метод select_tag, но вы должны вручную выписать параметры, которые являются пустой тратой. Похоже, что это было где-то исправлено.

Я мог бы написать свой собственный помощник, чтобы избавиться от написания этих тегов параметров вручную, но это то, что делает FormOptionsHelper#collection_select ... Есть ли эквивалент для форм без моделей?

1 Ответ

1 голос
/ 02 марта 2010

select и collection_select можно вызывать без модели. Я обычно использую комбинацию двух значимых слов и массив пар [метка, значение] для выбора. Единственный недостаток - использование формата abc [xyz].

Вы пытались использовать options_for_select ?

select_tag 'Account', options_for_select({ "Basic" => "$20", "Plus" => "$40" }, "$40")
...