2009-05-05 54 views
14

我需要从哈希中可用的值创建一个选择框。Rails - 从对象哈希创建选择标记

举例来说,我有一个“东西”和“东西”有多种状态字段:

1 => 'State A' 
2 => 'State B' 

可以通过对事物的方法。

我该如何建立一个选择标签?

回答

48

正如Schrockwell说:

Hash.each |a|返回形式a = [key, value]的数组,所以对于哈希@status_fields你可以写:

<%= collection_select('thing', 'status', @status_fields, :first, :last) %> 

另外,如果您想关键在选择列表和值点选择列表中值显示出来,然后:

<%= collection_select('thing', 'status', @status_fields, :last, :first) %> 

这将选择通过thing.status或没有给出的选项如果无返回

如果你只想创建不依赖于对象的任何选择使用

<%= select_tag('name', options_from_collection_for_select(@status_fields, :first, :last, '2')) %> 

其中“2”是所需的选择的指数

PS:我没有足够的声望去修改原来的帖子或对它发表评论

8

你可以做类似

select "foo", "bar", @hash_object 

select "foo", "bar", @hash_object.map { |h| [h.key, h.value] } 

我可能会首先反转的哈希值,使关键点的值

4

Hash.each |a|返回数组形式为a = [key, value],所以对于散列@status_fields你可以写:

<%= collection_select('thing', 'status', @status_fields, :first, :last) %> 

另外,如果您想关键在选择列表中显示和值点选择列表中的值,则:

<%= collection_select('thing', 'status', @status_fields, :last, :first) %> 
+0

那么,我怎么会告诉它选定的值 - 这看起来并没有把它拿起来。 – 2009-05-05 14:20:30

+0

该文档指出“将从实例对象的调用方法返回的值将被选中。”因此,不要将'thing'作为第一个参数传递,而是尝试传递对象@thing的实际实例。 – Schrockwell 2009-05-05 16:17:48