2016-08-25 5 views
0

Как мы можем использовать f.select тег для сбора статической хэш-значенияКак использовать 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

Что такое содержание '@ settings'? –

ответ

0

ANSWER.

С @settings - просто простой хэш, вам не нужно использовать map. select формы помощник должен выглядеть следующим образом:

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

РЕКОМЕНДУЕМОГО Refactor

Если вы непреклонны на использование map, я хотел бы предложить, чтобы реорганизовать код немного, чтобы предотвратить ваш взгляд от затопления с приложение логики, что-то вроде:

# 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 для работы.

+0

Спасибо за предложение, я попробовал с кодом, который вы указали, но я получаю пустые данные на моей странице просмотра. –

+0

Сделал некоторые обновления для моего ответа, попробуйте сейчас –

+0

Пожалуйста, предоставьте содержимое '@ settings' –

0

Вы можете попробовать рельсы-х 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

+0

Спасибо за рекомендации, но все же у меня такая же проблема –

+0

, пожалуйста, проверьте, @settings в ноль. – Sravan

Смежные вопросы