Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails - Creating a select tag from a object hash

I need to create a select box from the values available in a Hash.

For instance, I have a 'thing' and the 'thing' has a variety of status fields:

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

available via a method on thing.

How can I build a select tag from this?

like image 991
Neil Middleton Avatar asked May 05 '09 13:05

Neil Middleton


2 Answers

Just as Schrockwell has said:

Hash.each |a| returns an array of the form a = [key, value], so for the hash @status_fields you can write:

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

Alternatively, if you'd like the key to show up in the select list and the value point to the select list value, then:

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

This will select the option given by thing.status or nothing if nil is returned

If you want to just create any selection not tied to an object use

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

where '2' is the index of the desired selection

PS: I don't have enough reputation to just amend the original post or comment on it

like image 127
nasmorn Avatar answered Oct 03 '22 04:10

nasmorn


you could do something like

select "foo", "bar", @hash_object

or

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

I'd probably invert your hash first to make the key point to the value

like image 27
cpjolicoeur Avatar answered Oct 03 '22 02:10

cpjolicoeur