Reputation:
I need to have a drop down list in which the user selects the day of the week they want to come in every week. The values will never change right. It's just Sunday, Monday, ..., Saturday right? It seems like more work than needed to make a table and put the days of the week in. I certainly don't need the ability to create, update or delete them. Is there a simple way to handle something like this? Or maybe instead of days of the week it could be status like off, park, reverse, neutral, drive. The main thing is that the values are never going to change. There are just a few of them. So why make a table? I am thinking that there is a way to create a model that already has data in it but I could be wrong.
Upvotes: 13
Views: 13348
Reputation: 784
Note that Ruby has the English names for the days of the week already built into its date class. You should try to leverage that if you can. Here's the rdoc.
Then as Can has suggested just do the following:
select(:event, :day, Date::DAYNAMES)
Keep in mind that this solution is NOT particularly i18n friendly. If i18n is an issue, I would also check out the localized dates plugin and the changes that were made in Rails 2.2 to support i18n.
Upvotes: 9
Reputation: 113280
Why create a model? Just use select.
DAYS = ['Monday', 'Tuesday', 'Wednesday', ...]
select(:event, :day, DAYS)
It's usually better practice to place the constant in the relevant model and use it from there.
In your model:
class Event < ActiveRecord::Base
DAYS = ['Monday', 'Tuesday', 'Wednesday', ...]
end
and then in your view:
select(:event, :day, Event::DAYS)
and here's another trick I use a lot:
select(:event, :day, Event::DAYS.collect {|d| [d, Event::DAYS.index(d)]})
Upvotes: 28
Reputation: 115292
Try this:
<%= select_tag(:week_day, options_for_select([['Sunday', 'Sun'], ['Monday', 'Mon'], ...])) %>
See http://guides.rubyonrails.org/form_helpers.html#theselectandoptionstag
Upvotes: 6