Rails also provides support for basic date and time entry, as was shown in the form generated by the scaffolding. The scaffolding started out with:
<p> <b>Birthday</b><br /><%= f.date_select :birthday %>
</p> <p> <b>Favorite time</b><br /><%= f.datetime_select :favorite_time %>
</p>
And these generated the neat-looking but very inconvenient selection lists shown in Figure 6-5.
Besides the date_select
and
datetime_select
methods, Rails also
offers time_select
and has a variety of helper methods for individual pieces
of dates and times. Rails offers some options that can make these
interfaces more customizable, but picking days off a 31-item selection
list or minutes off a 60-item list is pretty much always going to be a
less-than-fun user experience. You’ll probably want to turn to more
attractive date and time interfaces from Ajax libraries or revert to
simple text boxes, but in case you have an application where you want to
use these methods, the options for them include:
:start_year
By default, Rails sets the start year to five years before the
current date. You can specify an earlier (or later) date if you
need to, by specifying :start_year
=>
value
.
:end_year
Rails also sets the end year to five years after the current
date. Again, you can specify a later (or earlier) date by
specifying :end_year =>
value
.
:use_month_numbers
If you’d prefer to have the months listed by number rather than by
name, set :use_month_numbers =>
true
.
:discard_day
Some date applications don’t need days. You can set :discard_day => true
to simply not include the day field.
You can also do the same with :discard_month
or :discard_year
, and for times and
datetimes, you can do the same with :discard_hour
, :discard_minute
,
and :discard_seconds
.
:disabled
Setting :disabled =>
true
tells Rails to show the date, but doesn’t allow
change. The values will appear in gray.
:include_blank
Setting :include_blank =>
true
tells Rails to include a blank choice at the top of each
selection list, so users don’t have to specify every single
component of a date.
:include_seconds
Specifying :include_seconds =>
true
adds a field for seconds to times and datetimes.
:order
Using the order
option lets
you specify the sequence for the different components of the date
or time. You list the components as an array, such as :order => [:month, :day,
:year]
.
:include_seconds
Specifying :include_seconds =>
true
adds a field for seconds to times and datetimes.
You’ll find some more exciting options for handling dates and times in Chapter 17.