从散列键/值对组合中创建选择

时间:2014-08-06 20:16:23

标签: ruby ruby-on-rails-4

我的模型中有键值对,我想创建一个选项 - 从中​​选择。它存储“儿童”的“C”和“配偶”的“S”等。

如果有更好的方法,我愿意重构,但是我想坚持使用ABBR值,因为我是一个可怕的拼写者。

我的模特:

class Identity < ActiveRecord::Base
  belongs_to :person, polymorphic: true

  RELATIONSHIP = {"M" => "Member", "S" => "Spouse", "C" => "Child", "DP" => "Domestic Partner"}     
end

我在表单中的目标是输出如下内容:

<select name="relationship">
   <option value="M">Member</option>
   <option value="S">Spouse</option>
</select>

我希望他们总是以某种顺序出现,所以我可能根本不会这样做。任何帮助将不胜感激!!!

2 个答案:

答案 0 :(得分:1)

您可以先在控制器中反转哈希值:

@inverted_relationships = Identity::RELATIONSHIP.invert

然后,您可以使用select_tag表单帮助程序在模板中提供这些内容:

<%= select_tag 'relationship', options_for_select(@inverted_relationships) %>

这应该产生:

<select name="relationship">
    <option value="M">Member</option>
    <option value="S">Spouse</option>
    etc.
</select>

答案 1 :(得分:0)

在模板中尝试此操作。

select_tag 'relationship', options_for_select(@relationships.collect{ |k,v| [k, v] })

其中@relationships是您将从控制器传递给模板的哈希值,您可以使用Identity :: RELATIONSHIP.collect {| k,v | [k,v]}