2013-12-11 103 views
1

如何爲模型生成一個選擇字段?如何將選擇(下拉列表)添加到我生成的表單中?

我的控制器發送應該用來填充選擇的數組。

控制器:

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

類型模型有一個ID和一個標籤。

的形式如下:

=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 ]} 

其中@categoriesCategory.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,用於將邏輯視圖分離到控制器中。 –

相關問題