супер хак, но мне нужно, чтобы решить эту проблему сразу для проекта клиента. Это все еще ошибка с 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
Я использую это с вложенная, полиморфная модель. Here's a question I had showing the models I'm using. Поэтому мне понадобилось 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
Надежда, что помогает, Копье
Спасибо, что действительно спасли день. Система - очень старый портал, который все еще работает на rails 2.1.0 и не может быть обновлен, потому что даже рельсы исправлены/взломаны, а покрытие для тестирования похоже на 0, поэтому это действительно стало удобным. Также добавлено количество хаков, необходимых для его продолжения :) – 2010-11-29 05:46:08