2013-03-18 40 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