views:

98

answers:

0

I have a simple model:

class Person < ActiveRecord::Base

  def dob=(dobstr)
    raise "oops"
  end

  def virtualdob=
    raise "virtual oops"
  end
end

dob is a table column. When I try to set it from a view, it correctly crashes ... but when I try to set it via the rails console, it never gets called... but calling the virtual attribute does raise the error.

>> a=Person.first
......

>> a.virtualdob="d"
RuntimeError: virtual oops
        from /...../app/models/person.rb:105:in `virtualdob='
        from (irb):7
>> a.dob="f"
=> "f"

I want to override dob= to use Chronic to parse date in a more forgiving manner, before validations. Making a different attribute is not acceptable, as views such as the rest_in_place plugin need the orginal attribute name.