rails/activemodel
2010-01-17 14:40:10 +01:00
..
examples Fix deprecated gem-name requires 2009-09-14 13:04:43 -07:00
lib Adding Proc support to validation messages so that they can become a little more dynamic, allowing for customisations during the request [#3514 status:resolved]. 2010-01-17 14:40:10 +01:00
test Adding Proc support to validation messages so that they can become a little more dynamic, allowing for customisations during the request [#3514 status:resolved]. 2010-01-17 14:40:10 +01:00
activemodel.gemspec Make gemspecs the authoritative source instead of generating them from the Rakefile 2009-09-25 00:46:13 -05:00
CHANGELOG Change the ActiveModel::Base.include_root_in_json default to true for Rails 3 [DHH] 2010-01-03 22:02:10 -05:00
CHANGES Introduce validates_with to encapsulate attribute validations in a class. 2009-08-09 22:47:56 -07:00
MIT-LICENSE License, version, and gemspec for ActiveModel. Ship it! 2009-08-31 19:09:16 -05:00
Rakefile Hush AMo test suite 2009-12-16 11:05:48 -06:00
README Merge docrails 2010-01-17 03:26:20 +05:30

= Active Model - defined interfaces for Rails

Prior to Rails 3.0, if a plugin or gem developer wanted to be able to have
an object interact with Action Pack helpers, it was required to either
copy chunks of code from Rails, or monkey patch entire helpers to make them
handle objects that did not look like Active Record.  This generated code
duplication and fragile applications that broke on upgrades.

Active Model is a solution for this problem.

Active Model provides a known set of interfaces that your objects can implement
to then present a common interface to the Action Pack helpers.  You can include
functionality from the following modules:

* Adding callbacks to your class

   class MyClass
     extend ActiveModel::Callbacks
     define_model_callbacks :create

     def create
       _run_create_callbacks do
         # Your create action methods here
       end
     end
   end
   
   ...gives you before_create, around_create and after_create class methods that
   wrap your create method.
   
  {Learn more}[link:classes/ActiveModel/CallBacks.html]

* For classes that already look like an Active Record object

    class MyClass
      include ActiveModel::Conversion
    end
    
    ...returns the class itself when sent :to_model

* Tracking changes in your object

    Provides all the value tracking features implemented by ActiveRecord...
    
    person = Person.new
    person.name # => nil
    person.changed? # => false
    person.name = 'bob'
    person.changed? # => true
    person.changed # => ['name']
    person.changes # => { 'name' => [nil, 'bob'] }
    person.name = 'robert'
    person.save
    person.previous_changes # => {'name' => ['bob, 'robert']}

  {Learn more}[link:classes/ActiveModel/Dirty.html]