如何使用f.select进行静态哈希值?

时间:2016-08-25 06:38:12

标签: javascript html css ruby-on-rails

我们如何使用f.select标签收集静态哈希值

class ReceiptPrinter
         RECEIPT_PRINTER_TYPES ={
            0=> "Normal",
            1=> "Dot Matrix",
            2=> "Thermal",
          }

        def initialize(options={})
                @receipt_printer_type=options[:receipt_printer_type] || DEFAULT_VALUES[:ReceiptPrinterType]
                @receipt_printer_header_height=options[:receipt_printer_header_height]|| DEFAULT_VALUES[:ReceiptPrinterHeaderHeight]
                @receipt_printer_header_type=options[:receipt_printer_header_type]|| DEFAULT_VALUES[:ReceiptPrinterHeaderType]
                @receipt_printer_template=options[:receipt_printer_template]|| DEFAULT_VALUES[:ReceiptPrinterTemplate]
                # define_methods()
        end
 end

在我的视图页面中,我使用了选择选项

<% form_for @receipt_printer, :url => { :action => "fees_receipt_settings" } do |f| %>
    <%= f.select("receipt_printer_template", @settings.map{| item| [item[0],item[1].to_i]},{},{:onchange => "set_template(this.value)"} ) %>
<% end %>

我得错误的参数数量

2 个答案:

答案 0 :(得分:0)

<强> ANSWER 即可。

由于@settings只是一个简单的哈希,因此您不必使用mapselect表单助手应如下所示:

<%= f.select :receipt_printer_template, @settings, {}, {onchange: "set_template(this.value)"} %>

建议的反思者

如果您坚持使用map,我建议稍微重构代码,以防止您的视图充斥着app逻辑,例如:

# app/helpers/receipt_helper.rb
def settings_for_select
  @settings.map{ |item| [item[0],item[1].to_i] }
end

# your form view
<%= f.select :receipt_printer_template, settings_for_select, {}, {onchange: "set_template(this.value)"} %>

应该稍微帮助一下,还要注意使用new哈希语法,它提供了一个更清晰的API来使用。

答案 1 :(得分:0)

您可以尝试使用rails options_for_select

<%= f.select :receipt_printer_template",options_for_select(@settings.map{ |item| [item[0], item[1]],{},{:onchange => "set_template(this.value)"} ) %>

Here is the reference