0

我可能错过了一些非常简单的东西,但希望能在这里得到一点帮助

<%= 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"]]) %>

后续问题 - :由于我在多个地方使用 select 选项,我的选项值与打印的字符串相同,有没有更好的方法来解决这个问题?

4

1 回答 1

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
于 2013-03-18T08:02:00.937 回答