2013-03-18 38 views
0

我可能失去了一些東西很簡單,但會在這裏欣賞一點點幫助Rails的選擇形式幫手

<%= select_tag('filters[order_sales_channel]',filter_params['order_sales_channel'],:multiple=>true,:class=>"advancedSearchFormSelectBox") %> 

我當時想給的選項中選擇

<option value="Web">Web</option> 
<option value="Phone">Phone</option> 

我怎樣才能做到這一點?我試過,但它不工作

<%= select_tag('filters[order_sales_channel]',filter_params['order_sales_channel'],:multiple=>true,:class=>"advancedSearchFormSelectBox") %> 
<%= options_for_select([["Web", "Web"], ["Phone", "Phone"]]) %> 

跟進的問題 - :由於我使用在多個地方選擇選項,在我的期權價值是一樣的打印字符串,有沒有更好的方法去這個?

+0

select_tag =>本身作爲參數來設置選項...閱讀鏈接http://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag – Rakesh 2013-03-18 08:00:25

回答

1

正確的方式做,這就是:

<%= select_tag 'filters[order_sales_channel]', 
       options_for_select(
       [["Web", "Web"], ["Phone", "Phone"]], 
       selected: filter_params['order_sales_channel'] 
       ), 
       multiple: true, 
       class: "advancedSearchFormSelectBox" %> 

,如果你的選擇將永遠是一樣的,只是硬編碼他們在相關類別:

class Order < ActiveRecord::Base 
    SELECT_OPTIONS = %w[Web Phone].map(&:freeze).freeze 
    def self.select_options 
    SELECT_OPTIONS.map{|o| [o,o] } 
    end 
end 

那麼您可以在使用你的options_for_select

options_for_select Order.select_options 

我喜歡這個解決方案,因爲你也可以使用SELECT_OPTIONS在驗證:

validates :some_attribute, inclusion: SELECT_OPTIONS 
+0

,如果名稱標籤是內部options_for_select或外部,當我在HTML中查看源代碼時,都會給出相同的結果<%= select_tag'filters [order_sales_channel]', options_for_select( [[「Web」,「Web」],[「Phone」,「Phone」] ], ), selected:filter_params ['order_sales_channel'], multiple:true, class:「advancedSearchFormSelectBox」%> – 2013-03-18 08:21:16