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

フォローアップの質問 -: オプション値が印刷された文字列と同じ複数の場所で選択オプションを使用しているため、これについてより良い方法はありますか?

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 に答える