rails:724
From: Hiroshi Takagi <gollum@h...>
Date: Sat, 03 Dec 2005 20:33:32 +0900
Subject: [rails:724] 悩ましい日付型, date_select, select_date
たかぎです。 Rails で日付型カラムを含むテーブルを扱う場合にぶつかった問題と、 対処方法について相談させてください。 テーブルに、shipping_date date のような日付型のカラムがあると、scaffold は、 <%= date_select 'model_class_name', 'shipping_date' %> のように date_select() を使った _form.rhtml を生成します。 この date_select() や select_date はフォーム上では、 <select name="model_class_name[shipping_date(1i)]"> <option value="2000">2000</option> ..... <select name="model_class_name[shipping_date(2i)]"> <option value="1">January</option> ..... <select name="model_class_name[shipping_date(3i)]"> <option value="1">1</option> .... <option value="31">31</option> ..... と、3 つの selection list を作ります。 これが困ったやつで。 2005-11-31 2005-2-31 のように日付として不正な選択をしてフォームから create/update などを実行すると、 ActiveRecord::MultiparameterAssignmentErrors が raise してしまいます。 これは、フォームからのparams から、 model_class のインスタンスをnew/update するタイミングで発生しますので、 model_class 中に validate を書いても止められません。 3 つの文字列から日付に変換する時点のエラーなのでしょう。 日付を扱うフォームのアプリケーションを作成されている方、 フォームからの日付項目の入力・修正、どうされていますか? わたしは、以下のような 下品な workaround で逃げてしまったのですが、 ほかによい方法があれば、教えてください。 1. date 型のカラムがあるテーブルには、そのカラムに対応した 入力・修正用のvarchar型カラムを作っておく。 ex.) shipping_date --> shipping_date_s 2. form 上では、select_date, date_select は使わない。 (年月までの選択なら使いますが。) 3. model 中に以下のような validate と文字->日付変換methodを定義しておく。 def validate begin Date.parse(self.b_shipping_date_s) rescue ArgumentError errors.add(:shipping_date_s, "invalid date") end end def before_save self.shipping_date = Date.parse(self.shipping_date_s) self.shipping_date_s = self.shipping_date.strftime("%Y-%m-%d") end DBテーブルに入力用のフィールドがでかい顔して居座っているのは、 実に美しくないのですが、フォーム上での validation message がまとめられる ので、こういうかたちにしちゃいました。 -- Hiroshi Takagi <gollum@h...> -- ML: rails@r... 使い方: http://QuickML.com/ Web Site: http://wiki.fdiary.net/rails/ ML Archives: http://www.fdiary.net/ml/rails/
-> 724 2005-12-03 12:33 [gollum@h... ] 悩ましい日付型, date_select, select_date 725 2005-12-03 12:49 ┣[osakanas@g... ] 726 2005-12-03 13:42 ┃┣[kazuhiko@f... ] 727 2005-12-03 13:59 ┃┗[gollum@h... ] 729 2005-12-04 07:02 ┗[moriq@m... ] 730 2005-12-04 07:09 ┣[moriq@m... ] 731 2005-12-04 07:30 ┣[moriq@m... ] 733 2005-12-04 10:26 ┗[gollum@h... ] 734 2005-12-04 11:44 ┗[moriq@m... ] 735 2005-12-04 11:56 ┣[moriq@m... ] 739 2005-12-04 16:49 ┗[gollum@h... ]