Rails选择表单助手

时间:2013-03-18 07:54:28

标签: ruby-on-rails ruby-on-rails-3

我可能遗漏了一些非常简单的东西,但在这里会有点帮助

<%= 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选项,其中我的选项值与打印字符串相同,是否有更好的方法可以解决这个问题?

1 个答案:

答案 0 :(得分: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