2013-12-11 6 views
1

Как добавить поле выбора в форму, если оно создано для модели?Как добавить выпадающий список в мою сгенерированную форму?

Мой контроллер отправляет массив, который должен использоваться для заполнения выбора.

Контроллер:

def new 
    @categories= Category.all 
    @product= Product.new 
end 

Модель Категория имеет идентификатор и метку.

форма выглядит следующим образом:

=form_for :product do |f| 
- if @product.errors.any? 
#error_explanation 
    %h2 
    = pluralize(@product.errors.count, "error") 
    prohibited 
    this product from being saved: 
    %ul 
    - @product.errors.full_messages.each do |msg| 
     %li= msg 
%p 
    = f.label :title 
    %br 
    = f.text_field :title 
%p 
= f.label :category_id 
%br 
= f.xxxxxxxxx 
%p 
    = f.submit 

xxxxxxxxx это место, где я нужен выбор заселена @categories массива.

ответ

2
= f.select :category_id, @categories.collect {|c| [ c.name, c.id ]} 

где @categories является Category.all

+0

Спасибо, теперь я понимаю. Он работает отлично. – LogofaT

1

Я бы избежать @NARKOZ предложение по двум причинам. Самое главное, что он встраивает логику, которая должна быть в контроллере (выборка записей категории) в представление. Это плохое разделение. Во-вторых, существует очень удобный метод collection_select, который выполняет одно и то же.

= f.collection_select :category_id, @categories, :id, :name, {prompt: 'Pick a category'}, { class: 'select-this' } 

Это предполагает, что вы загрузили переменную @categories экземпляра в контроллере, как вы были в вашем вопросе.

Обратите внимание, что этот метод принимает два дополнительных хэша в конце. Первый хеш принимает обычные параметры для метода select. Второй хэш принимает параметры HTML (например, атрибуты HTML, класс и т. Д.).

+0

+1 для отделения логики вне поля зрения от контроллера. –

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