mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Adding documentation for ActiveModel::Serialization
This commit is contained in:
parent
e6063282f9
commit
19814df40d
3 changed files with 73 additions and 3 deletions
|
@ -142,3 +142,15 @@ functionality from the following modules:
|
|||
|
||||
{Learn more}[link:classes/ActiveModel/Observer.html]
|
||||
|
||||
* Making your object 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]
|
||||
|
||||
|
|
|
@ -2,6 +2,64 @@ require 'active_support/core_ext/hash/except'
|
|||
require 'active_support/core_ext/hash/slice'
|
||||
|
||||
module ActiveModel
|
||||
|
||||
# Provides a basic serialization to a serializable_hash for your object.
|
||||
#
|
||||
# A minimal implementation could be:
|
||||
#
|
||||
# class Person
|
||||
#
|
||||
# include ActiveModel::Serialization
|
||||
#
|
||||
# attr_accessor :name
|
||||
#
|
||||
# def attributes
|
||||
# @attributes ||= {'name' => 'nil'}
|
||||
# end
|
||||
#
|
||||
# end
|
||||
#
|
||||
# Which would provide you with:
|
||||
#
|
||||
# person = Person.new
|
||||
# person.serializable_hash # => {"name"=>nil}
|
||||
# person.name = "Bob"
|
||||
# person.serializable_hash # => {"name"=>"Bob"}
|
||||
#
|
||||
# You need to declare some sort of attributes hash which contains the attributes
|
||||
# you want to serialize and their current value.
|
||||
#
|
||||
# Most of the time though, you will want to include the JSON or XML
|
||||
# serializations. Both of these modules automatically include the
|
||||
# ActiveModel::Serialization module, so there is no need to explicitly
|
||||
# include it.
|
||||
#
|
||||
# So a minimal implementation including XML and JSON would be:
|
||||
#
|
||||
# class Person
|
||||
#
|
||||
# include ActiveModel::Serializers::JSON
|
||||
# include ActiveModel::Serializers::Xml
|
||||
#
|
||||
# attr_accessor :name
|
||||
#
|
||||
# def attributes
|
||||
# @attributes ||= {'name' => 'nil'}
|
||||
# end
|
||||
#
|
||||
# end
|
||||
#
|
||||
# Which would provide you with:
|
||||
#
|
||||
# person = Person.new
|
||||
# person.serializable_hash # => {"name"=>nil}
|
||||
# person.to_json # => "{\"name\":null}"
|
||||
# person.to_xml # => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<serial-person...
|
||||
#
|
||||
# person.name = "Bob"
|
||||
# person.serializable_hash # => {"name"=>"Bob"}
|
||||
# person.to_json # => "{\"name\":\"Bob\"}"
|
||||
# person.to_xml # => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<serial-person...
|
||||
module Serialization
|
||||
def serializable_hash(options = nil)
|
||||
options ||= {}
|
||||
|
|
|
@ -85,8 +85,8 @@ module ActiveModel
|
|||
@options[:except] = Array.wrap(@options[:except]).map { |n| n.to_s }
|
||||
end
|
||||
|
||||
# To replicate the behavior in ActiveRecord#attributes,
|
||||
# <tt>:except</tt> takes precedence over <tt>:only</tt>. If <tt>:only</tt> is not set
|
||||
# To replicate the behavior in ActiveRecord#attributes, <tt>:except</tt>
|
||||
# takes precedence over <tt>:only</tt>. If <tt>:only</tt> is not set
|
||||
# for a N level model but is set for the N+1 level models,
|
||||
# then because <tt>:except</tt> is set to a default value, the second
|
||||
# level model can have both <tt>:except</tt> and <tt>:only</tt> set. So if
|
||||
|
|
Loading…
Reference in a new issue