date_selectヘルパーの注意点
date_selectヘルパーは引数で渡したインスタンス名とメソッド名から年月日の選択状態を自動的に判断してくれて便利なのだけれど、インスタンスがローカル変数だと値を読み取ってくれず、常に最新の日付になってしまうと言う問題がある。
date_select(object_name, attribute_name)
上記のようなコードの場合、object_nameじゃなくて@object_nameに目的のインスタンスが入ってなきゃダメだった。
date_selectに限らず全般的にそうなのかも。スコープが原因なのかなぁ。
基本的に編集画面で表示されるインスタンスは一つだろうからそんなに多発する問題ではないと思うけれど、ちょっと不便と言うかドキュメントに明記しておいて欲しいなと言うか。
理由を詳しく知りたいと思ってactionpack\lib\action_view\helpers\date_helper.rbを調べるも、363行目付近の以下のコードで挫折。
def date_or_time_select(options) defaults = { :discard_type => true } options = defaults.merge(options) datetime = value(object) datetime ||= Time.now unless options[:include_blank]
datetimeオブジェクトが選択状態を決定するための変数なんだけど、datetime = value(object)っていうコードが何をしているのかが不明。valueが何なのか分からない。。。
同じように疑問に思ってる人もいるみたい。凄い昔だけど…。
3 日坊主日記 - date_select , actionpack-controller_name-untaint.patch