从collection_select返回一个数字

时间:2013-06-29 15:46:33

标签: ruby-on-rails ruby simple-form

我正在使用带有集合的输入字段,该集合是从模型中的数组中提取的。这很好用,但我想为表中的实际列返回一个不同的值。我正在使用 simple_form

模型

TASK_OPTIONS = %w(Detection Cloning Sequencing Primer_List Primer_Check)

查看

<%= f.input :primer_task, :collection => Primer3Batch::TASK_OPTIONS, :label => 'Task' %>

我可能想要返回这样的内容:

{1 => 'Detection', 2 => 'Cloning'... etc

或者这个:

{'AB' => 'Detection, 'C' => 'Cloning' ....

即:页面将显示检测,克隆等,但数据库列将存储 1,2 AB,C 我已经猜到它可以用哈希来完成,但我不能完全解决语法问题。

1 个答案:

答案 0 :(得分:0)

a = []
%w(Detection Cloning Sequencing Primer_List Primer_Check).each.with_index(1) do |it,ind|
    a << [ind,it]
end
Hash[a]
# => {1=>"Detection",
#     2=>"Cloning",
#     3=>"Sequencing",
#     4=>"Primer_List",
#     5=>"Primer_Check"}

使用Enumerable#each_with_object

a = %w(Detection Cloning Sequencing Primer_List Primer_Check)
a.each_with_object({}) {|it,h| h[a.index(it) + 1 ] = it }
# => {1=>"Detection",
#     2=>"Cloning",
#     3=>"Sequencing",
#     4=>"Primer_List",
#     5=>"Primer_Check"}