views:

127

answers:

1

I have a list of values (Beginner, Intermediate, Advanced, Fluent, Native) that I would like to:

  • act as the model for a SELECT list
  • act as a model to convert ids to values in a HTML table
  • use in multiple controllers and views
  • keep in an order that preserves the business rules (ordered by skill level)
  • localize at some point in the future

Is there a way of implementing this list to address all or most of my needs?

+1  A: 

You can put the definition of an array in /config/locales/some_language.yml

for example you could have the following in en.yml

en:
   experience_levels: 
          1: Beginner 
          2: Intermediate
          3: Advanced 
          4: Fluent
          4: Native

To get the key value pairs into a helper, the following should work:

def experience_levels 
    I18n.t(:experience_levels).map { |key, value| [ value, key ] } 
end

To use this in a select box,you would just put the following in your form_for

<%= f.select :experience_levels, experience_levels %>

If you are using form_tag instead you need the following:

<%= select_tag :experience_levels, options_for_select(experience_levels) %>
ajmurmann
Thank you, thank you, thank you. Any thoughts on how I would add a localized 'Choose...' option to the top of the list? Perhaps 0: Choose...?
Craig
You could add the "Choose" element to the array. But maybe it would be better to have a seperate value that is prepended in the helper before it's inserted into the select tag. This way you can use it for all select tags and only have one place where you change it.
ajmurmann