ActionView::Helpers::DateHelper
def date_select(object_name, method, options = {}, html_options = {})

説明

モデルの属性に紐づく、年・月・日の <select> を作ります。

引数

値を変えると、ERB と HTML が変わります。

object_name:user
method:birthday
この属性から、次のものを作ります。
  • name:user[birthday(1i)] のように、(1i)(年)、(2i)(月)、(3i)(日)を付けた形です。Active Record は、届いた 3 つの値を 1 つの日付にして、属性に入れます。
  • selected:オブジェクトの値と同じ value の <option> に追加します(オブジェクトの値がなければ今日の日付)。オブジェクトの値がなく、include_blank か prompt を渡したときは、どれにも追加しません。
  • 並べる値:年は、selected を追加する年(なければ今年)の前後 5 年です。日は、月によらず 1 から 31 までです。
options= {}

日付の <select> の options

[:day, :month, :year]
年、月、日の <select> を、渡した順に並べます。デフォルトは訳(date.order)の順です。配列にない年、月、日は、discard_year などを渡したときと同じく hidden の <input> にします(月がないと、日も value が 1 の hidden になります)。
1980
年の <select> の最初の年です。デフォルトは selected を追加する年の 5 年前です。
1985
年の <select> の最後の年です。デフォルトは selected を追加する年の 5 年後です。start_year より小さいと、年を新しい順に並べます。
true にすると、月の <option> のテキストを、名前ではなく数字にします。
true にすると、月と日の <option> のテキストを、2 桁の数字にします。
true にすると、月の <option> のテキストを、数字と名前にします。
"%{number}: %{name}"
月の <option> のテキストの形です。%{number} に数字、%{name} に名前が入ります。
->(year) { "Year #{year}" }
年ごとに Proc を呼んで、返した値を年の <option> のテキストにします。
->(day) { "Day #{day}" }
日ごとに Proc を呼んで、返した値を日の <option> のテキストにします。
" / "
年、月、日の <select> の間に、この文字列を入れます。文字列はエスケープしません(&mdash; などの文字参照も、そのまま HTML になります)。
true にすると、日の <select> の代わりに、value が 1 の hidden の <input> を追加します。
true にすると、月の <select> の代わりに、hidden の <input> を追加します。日の <select> も、value が 1 の hidden の <input> にします。
true にすると、年の <select> の代わりに、hidden の <input> を追加します。

すべての <select> の options

true にすると、全部の <select> の先頭に、value が空の <option> を追加します。
渡す値によって、次のように変わります。
  • true:全部の <select> の先頭に、value が空の <option> を追加します。テキストは datetime.prompts.year などの訳です。
  • 文字列:全部の <select> の先頭に追加し、その文字列をテキストにします。
  • Hash({ year: "年" }):キーの名前の <select>(year なら年の <select>)にだけ追加し、値をテキストにします。
Date.new(2000, 1, 2)
オブジェクトの値がないときに、selected を追加する日付です。options の include_blank か prompt を渡すと、使いません。Hash({ day: 20 })を渡すと、渡さなかった年や月は今日のものを使います。
Date.new(2000, 1, 2)
オブジェクトの値の代わりに、selected を追加する日付です。
true にすると、全部の <select> と hidden の <input> に disabled を追加します。
true にすると、それぞれの <select> に、年なら class="year"、時なら class="hour" のように class を追加します。Hash({ year: "y" })を渡すと、キーの名前の <select> の class 属性の値を Hash の値にし、ほかの <select> には class="" を追加します。html_options の class も渡すと、その値のうしろに空白をはさんで足します(Hash や配列の class は、そのまま文字列になります)。
true にすると、全部の <select> の代わりに、hidden の <input> を追加します。
Rails は DateHelper のどのヘルパーでも、同じ名前の options をほぼ同じように処理します。違うものは、その option の説明に書いています。locale を渡すと、月の名前と prompt の文字列と date.order の並びに、そのロケールの訳を使います。このページでは、HTML が変わらないものと、使う場面が少ないとこのサイトで判断したものを省いています。ここにない options は、HTML 属性になりません。
html_options= {}
ヘルパー共通の options

Rails はどのヘルパーでも、これらの options を同じように処理します。HTML の仕様で <select> に使えないものや、使う場面が少ないとこのサイトで判断したものは、ここでは省いています。

すべてのヘルパー共通

{active: true, hidden: false}
Hash を渡すと、値が false と nil 以外のキーを空白でつなぎます。配列を渡すと、nil、false、空の文字列(空白だけの文字列も)を外して、空白でつなぎます。
{controller: "tags", tags_suggestions_value: ["ruby", "rails"]}
Hash を渡すと、キーの _ を - にして、data-* 属性を追加します。値に配列や Hash を渡すと、JSON の文字列にします。
{describedby: ["name_help", "name_error"], invalid: false}
:data と同じく、aria-* 属性を追加します。値が配列なら、nil と空の文字列を外して、空白でつなぎます(何も残らなければ、追加しません)。値が Hash なら、値が false と nil 以外のキーを空白でつなぎます。
ここにない html_options は、3 つの <select> の HTML 属性になります。値が nil なら、その HTML 属性は追加しません。id と name も、自動で作る値の代わりに、全部の <select> に同じ値を使います。

ERB

直前との違い: 追加 削除 変更


          

HTML


          

プレビュー

プレビューを操作すると、フォーム送信の内容が変わります。

フォーム送信

フォームデータ

namevalue
リクエストボディを見る

Content-Type:


              

params