diff options
author | Gonçalo Silva <goncalossilva@gmail.com> | 2011-03-24 17:21:17 +0000 |
---|---|---|
committer | Gonçalo Silva <goncalossilva@gmail.com> | 2011-03-24 17:21:17 +0000 |
commit | 9887f238871bb2dd73de6ce8855615bcc5d8d079 (patch) | |
tree | 74fa9ff9524a51701cfa23f708b3f777c65b7fe5 /activemodel/README.rdoc | |
parent | aff821508a16245ebc03510ba29c70379718dfb7 (diff) | |
parent | 5214e73850916de3c9127d35a4ecee0424d364a3 (diff) | |
download | rails-9887f238871bb2dd73de6ce8855615bcc5d8d079.tar.gz rails-9887f238871bb2dd73de6ce8855615bcc5d8d079.tar.bz2 rails-9887f238871bb2dd73de6ce8855615bcc5d8d079.zip |
Merge branch 'master' of https://github.com/rails/rails
Diffstat (limited to 'activemodel/README.rdoc')
-rw-r--r-- | activemodel/README.rdoc | 78 |
1 files changed, 39 insertions, 39 deletions
diff --git a/activemodel/README.rdoc b/activemodel/README.rdoc index 89cacbcab4..b5b5edd52a 100644 --- a/activemodel/README.rdoc +++ b/activemodel/README.rdoc @@ -8,7 +8,7 @@ the Rails framework. Prior to Rails 3.0, if a plugin or gem developer wanted 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 exacly conform to the Active Record interface. This would result +that did not exactly conform to the Active Record interface. This would result in code duplication and fragile applications that broke on upgrades. Active Model solves this. You can include functionality from the following @@ -18,38 +18,38 @@ modules: class Person include ActiveModel::AttributeMethods - + attribute_method_prefix 'clear_' define_attribute_methods [:name, :age] - + attr_accessor :name, :age - + def clear_attribute(attr) send("#{attr}=", nil) end end - + person.clear_name person.clear_age - + {Learn more}[link:classes/ActiveModel/AttributeMethods.html] - + * Callbacks for certain operations class Person extend ActiveModel::Callbacks define_model_callbacks :create - + def create - _run_create_callbacks do + run_callbacks :create do # Your create action methods here end end end - + This generates +before_create+, +around_create+ and +after_create+ class methods that wrap your create method. - + {Learn more}[link:classes/ActiveModel/CallBacks.html] * Tracking value changes @@ -66,38 +66,38 @@ modules: person.name = 'robert' person.save person.previous_changes # => {'name' => ['bob, 'robert']} - + {Learn more}[link:classes/ActiveModel/Dirty.html] * Adding +errors+ interface to objects Exposing error messages allows objects to interact with Action Pack helpers seamlessly. - + class Person - + def initialize @errors = ActiveModel::Errors.new(self) end - + attr_accessor :name attr_reader :errors - + def validate! - errors.add(:name, "can not be nil") if name == nil + errors.add(:name, "can not be nil") if name.nil? end - + def ErrorsPerson.human_attribute_name(attr, options = {}) "Name" end - + end - + person.errors.full_messages - # => ["Name Can not be nil"] - + # => ["Name can not be nil"] + person.errors.full_messages - # => ["Name Can not be nil"] + # => ["Name can not be nil"] {Learn more}[link:classes/ActiveModel/Errors.html] @@ -106,9 +106,9 @@ modules: class NamedPerson extend ActiveModel::Naming end - - NamedPerson.model_name #=> "NamedPerson" - NamedPerson.model_name.human #=> "Named person" + + NamedPerson.model_name # => "NamedPerson" + NamedPerson.model_name.human # => "Named person" {Learn more}[link:classes/ActiveModel/Naming.html] @@ -117,19 +117,19 @@ modules: ActiveModel::Observers allows your object to implement the Observer pattern in a Rails App and take advantage of all the standard observer functions. - + {Learn more}[link:classes/ActiveModel/Observer.html] * Making objects serializable ActiveModel::Serialization provides a standard interface for your object to provide +to_json+ or +to_xml+ serialization. - + s = SerialPerson.new s.serializable_hash # => {"name"=>nil} s.to_json # => "{\"name\":null}" s.to_xml # => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<serial-person... - + {Learn more}[link:classes/ActiveModel/Serialization.html] * Internationalization (i18n) support @@ -137,10 +137,10 @@ modules: class Person extend ActiveModel::Translation end - + Person.human_attribute_name('my_attribute') - #=> "My attribute" - + # => "My attribute" + {Learn more}[link:classes/ActiveModel/Translation.html] * Validation support @@ -157,10 +157,10 @@ modules: person = Person.new person.first_name = 'zoolander' - person.valid? #=> false + person.valid? # => false {Learn more}[link:classes/ActiveModel/Validations.html] - + * Custom validators class Person @@ -168,17 +168,17 @@ modules: validates_with HasNameValidator attr_accessor :name end - + class HasNameValidator < ActiveModel::Validator def validate(record) record.errors[:name] = "must exist" if record.name.blank? end end - + p = ValidatorPerson.new - p.valid? #=> false - p.errors.full_messages #=> ["Name must exist"] + p.valid? # => false + p.errors.full_messages # => ["Name must exist"] p.name = "Bob" - p.valid? #=> true + p.valid? # => true {Learn more}[link:classes/ActiveModel/Validator.html] |