. (.. written_at). Date_select { 'written_at(1)' => '2009', 'written_at(2)' => '5', 'written_at(3)' => '27' } . Active records Date .
, Date , Date.new(2009, 0, 1). Rails Time. Rails , . 1.
, written_at Date Time . , written_at_before_time_cast.
: written_at_year, written_at_year= written_at_year_before_type_cast ( , ). before_validation write_at.
class Event < ActiveRecord::Base
before_validation :reconstruct_written_at
def written_at_year=(year)
@written_at_year_before_type_cast = year
end
def written_at_year
written_at_year_before_type_cast || written_at.year
end
def written_at_year_before_type_cast
@written_at_year_before_type_cast
end
private
def reconstruct_written_at
written_at = Date.new(written_at_year, written_at_month, written_at_day)
rescue ArgumentError
written_at = nil
end
end