Супер хак, но мне нужно было сразу решить эту проблему для клиентского проекта. Это все еще ошибка в 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
В противном случае он либо будет нулевым, либо выдаст ошибку:
1 error(s) on assignment of multiparameter attributes
Надеюсь, это поможет,
Lance