Date_select validation of a invalid date

Hi,

What I’m asking might be simple for some of you but I’m trying to fix
this for two days and I just can’t figure out how to make this thing
work. I have a model with a date_select validation that is working
just fine except when I fill the form with a invalid date like Feb 30
1989. I thought the plugin validates_multiparameter_assignments would
catch this kind of invalid date but for some reason is just not
working. Below I’m pasting my model and controller code to see if
someone can help me.

class Spec < ActiveRecord::Base

belongs_to :user

ALL_FIELDS = %w(first_name last_name address phone gender birthdate
city state zip_code)
STRING_FIELDS = %w(first_name last_name address phone city state)
VALID_GENDERS = [“Male”, “Female”]
START_YEAR = 1900
END_YEAR = Date.today.year - 18
ZIP_CODE_LENGTH = 10

validates_length_of STRING_FIELDS, :maximum => DB_STRING_MAX_LENGTH
validates_inclusion_of :gender, :in => VALID_GENDERS, :allow_nil =>
true, :message => “must be male or female”
validates_presence_of :zip_code, :birthdate
validates_multiparameter_assignments :message => " is not a valid
date."
validates_each :birthdate do |record, attr, value|
record.errors.add attr, “is not a valid date. You must be at
least 18 years old to sign in.” if value > Date.new((Date.today.year -
18),(Date.today.month),(Date.today.day))
end
end

class SpecController < ApplicationController

before_filter :protect

Edit the user’s spec.

def edit
@user = User.find(session[:user_id])
@title = “aykal - edit #{@user.screen_name} profile”
@user.spec ||= Spec.new
@spec = @user.spec
if param_posted?(:spec)
@user.spec.valid?
if @user.spec.update_attributes(params[:spec])
flash[:notice] = “Changes saved.”
redirect_to :controller => “user”, :action => “index”
end
end
end

end

Thanks,
Thiago G.

well there is a plugin for datevalidation call
validates_date_time
http://agilewebdevelopment.com/plugins/validates_date_time

Oh, I forgot to send the error msg I’m getting and I also double
checked and it is not working with any date I try. It is not just with
the invalid ones…

NoMethodError in SpecController#edit

You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.>

What I don’t get is that birthdate is not nil…

Request

Parameters: {“commit”=>“Update”, “spec”=>{“city”=>“ccc xxx”,
“zip_code”=>“30350210”, “birthdate(1i)”=>“1989”, “country”=>“Brasil”,
“gender”=>“Male”, “birthdate(2i)”=>“10”, “birthdate(3i)”=>“23”,
“phone”=>"+55 31 94224242", “first_name”=>“Thiago Lemos”,
“last_name”=>“Guerra”, “address”=>“R. Jubtanga 377/01 - Sto Antonio”,
“state”=>“Minas Gerais”}}

this is my view

<% form_for :spec do |form| %>

<%= "edit #{@user.screen_name} profile" %>

<%= error_messages_for ‘spec’ %>
<%= field_for(“text”, form, “first_name”)%>
<%= field_for(“text”, form, “last_name”) %>


Gender:
<%= radio_button(:spec, :gender, “Male”) %> Male
<%= radio_button(:spec, :gender, “Female”) %> Female


Birthdate:
<%= date_select :spec, :birthdate,
:start_year => Spec::END_YEAR,
:end_year => Spec::START_YEAR,
:order => [:month, :day, :year] %>

<%= field_for(“text”, form, “phone”) %>
<%= field_for(“text”, form, “address”) %>
<%= field_for(“text”, form, “city”) %>
<%= field_for(“text”, form, “state”) %>
<%= field_for(“text”, form, “country”) %>
<%= field_for(“text”, form, “zip_code”, Spec::ZIP_CODE_LENGTH,
Spec::ZIP_CODE_LENGTH) %>
<%= submit_tag "Update", :class => "submit" %>
<% end %>

Thanks,
Thiago