This would be my solution:

lib/formatted_date_time.rb:

class ActiveRecord::Base
  
  def self.formatted_date_accessor(*names)
    names.each do |name|
      define_method("#{name}=") do |value|
        super(value)
        if value.present? && self[name].nil?
          class_eval do
            define_method name.to_sym do
              value
            end
          end
          self.class.validate do
            errors.add(name.to_sym, "can't be formatted")
          end
        end
      end
    end
  end
  
end


class User < ActiveRecord::Base
  formatted_date_accessor :birth_date

end

If you passing invalid date, it raises an validation error, but returns the 
invalid date to a form _at_request_.




On 01.02.2012, at 12:22, sandip ransing wrote:

> consider scenario,
> 
> User model with name, birth_date fields (here birth_date is not mandatory 
> field)
> 
> inside view form birth_date is assigned as '31/31/1985' which is invalid
> 
> ideally user object should be invalid and while save raise an error on 
> birth_date field but that's not happening and user object gets saved with 
> birth_date as blank which is completely misleading.
> 
> After debugging found that while assigning attributes birth_date value it 
> gets assigned as blank and as birth_date is optional object gets saved.
> 
> class User < ActiveRecord::Base
> 
> 
>   def initialize(args={})
>     logger.info args[:birth_date] #invalid value comes upto here but vanishes 
> afterwords
> 
> 
>     super
>   end
> end
> 
> Any clue how to get validation working properly for not mandatory date fields 
> ??
> 
> 
> -- 
> sαη∂ιρ Rαηѕιηg
> 
> ---
> www.funonrails.com
> 
> twitter, github @sandipransing
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Talk" group.
> To post to this group, send email to rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to 
> rubyonrails-talk+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/rubyonrails-talk?hl=en.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to