スーパーハックですが、クライアントプロジェクトのためにこの問題をすぐに解決する必要がありました. これはまだ Rails 2.3.5 のバグです。
date_select
またはのいずれかを使用してdatetime_select
、これをメソッドのモデルに追加するとinitialize
、渡されたフォーム シリアル化された属性を事前に解析して機能させることができます。
def initialize(attributes={})
date_hack(attributes, "deliver_date")
super(attributes)
end
def date_hack(attributes, property)
keys, values = [], []
attributes.each_key {|k| keys << k if k =~ /#{property}/ }.sort
keys.each { |k| values << attributes[k]; attributes.delete(k); }
attributes[property] = values.join("-")
end
ネストされたポリモーフィックなモデルでこれを使用しています。 これは、私が使用しているモデルを示す質問です。だから私accepts_nested_attributes_for
は日時が必要でした。
コンソールを使用した入力と出力は次のとおりです。
e = Event.last
=> #<Event id: 1052158304 ...>
e.model_surveys
=> []
e.model_surveys_attributes = [{"survey_id"=>"864743981", "deliver_date(1i)"=>"2010", "deliver_date(2i)"=>"2", "deliver_date(3i)"=>"11"}]
PRE ATTRIBUTES: {"survey_id"=>"864743981", "deliver_date(1i)"=>"2010", "deliver_date(2i)"=>"2", "deliver_date(3i)"=>"11"}
# run date_hack
POST ATTRIBUTES: {"survey_id"=>"864743981", "deliver_date"=>"2010-2-11"}
e.model_surveys
=> [#<ModelSurvey id: 121, ..., deliver_date: "2010-02-11 05:00:00">]
>> e.model_surveys.last.deliver_date.class
=> ActiveSupport::TimeWithZone
それ以外の場合は null であるか、エラーがスローされます。
1 error(s) on assignment of multiparameter attributes
お役に立てば幸いです、ランス