我们如何使用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 %>
我得错误的参数数量
答案 0 :(得分:0)
<强> ANSWER 即可。
由于@settings
只是一个简单的哈希,因此您不必使用map
。 select
表单助手应如下所示:
<%= 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)"} ) %>