Rails集合选择Enum值

时间:2015-03-19 03:16:31

标签: ruby-on-rails

我有以下代码,显示包含可能流列表的用户下拉列表。

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

枚举在Log模型中定义,如下所示,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>

当用户提交表单而不是字符串值时,如何编写与所选流相对应的整数值的代码?

1 个答案:

答案 0 :(得分:3)

Log.stream_types.keys.to_a.map { |w| [w.humanize, w] }更改为Log.stream_types.map { |k, v| [k.humanize, v] }select的第二个参数是一个选项数组数组。选项数组的第一个和第二个元素分别是text和option元素的值。