2015-03-19 6 views
2

У меня есть код ниже, который отображает выпадающий список для пользователя, содержащий список возможных потоков.Rails collection select with Enum values ​​

Select Stream ID: 
<%= f.select :stream_id, Log.stream_types.keys.to_a.map { |w| [w.humanize, w] } %> 

Перечисление определяется в модели Log, как показано ниже, и модель входа имеет поле с именем stream_type_id, как показано ниже.

enum stream_type: {P1: 1, P2: 2, P3: 3, P4: 4, SR: 5, PASM1: 6, PASM2: 7, AME: 8, AD: 9, Training: 10, Vacation: 11, Sick_Leave: 12, Comp_off: 13, PH_OH: 14 } 

Когда я отобразить страницу HTML код, ниже показано:

<select id="log_stream_id" name="log[stream_id]"><option value="P1">P1</option> 
<option value="P2">P2</option> 
<option value="P3">P3</option> 
<option value="P4">P4</option> 
<option value="SR">Sr</option> 
<option value="PASM1">Pasm1</option> 
<option value="PASM2">Pasm2</option> 
<option value="AME">Ame</option> 
<option value="AD">Ad</option> 
<option value="Training">Training</option> 
<option value="Vacation">Vacation</option> 
<option value="Sick_Leave">Sick leave</option> 
<option value="Comp_off">Comp off</option> 
<option value="PH_OH">Ph oh</option></select> 

Как можно писать код, который передается целое значение, соответствующее выбранному потоку, когда пользователь отправляет форму а не значение String?

ответ

2

Изменить Log.stream_types.keys.to_a.map { |w| [w.humanize, w] }Log.stream_types.map { |k, v| [k.humanize, v] }. Второй аргумент select - это массив массивов опций. Первый и второй элементы опционного массива - это текст и значение элемента опции соответственно.