[Braindump]
I stumbled on the code to define an attribute in the model. Since my 
personal opinion is that default and type logic of an attribute is the 
responsibility of the model and not of a database column type I was really 
happy to see the code appear in rails:

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/attributes.rb#L78

The current implementation of the attribute method requires a mandatory 
second argument type caster object. Since active record has a very good 
mechanism of creating a good default type caster based on a database column 
I suggest to use it for this method. In pseudo monkey patch code:

class MyModel < ActiveRecord::Base
  def self.attribute(name, options = {})
    type_caster = options.delete(:type) || columns_hash[name.to_s].cast_type
    super(name, type_caster, options)
  end


  attribute :my_number, default: 5 
  attribute :price_in_cents, type: MoneyType.new
end

aka, make the type caster an option, not a required argument and fall back 
to the default based on the database column type. 

Thanks for all the good work!! 

Benjamin ter Kuile


-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to