Module: ActiveRecord::AttributeMethods::BeforeTypeCast
- Extended by:
- ActiveSupport::Concern
- Defined in:
- activerecord/lib/active_record/attribute_methods/before_type_cast.rb
Overview
Active Record Attribute Methods Before Type Cast
ActiveRecord::AttributeMethods::BeforeTypeCast provides a way to read the value of the attributes before typecasting and deserialization.
class Task < ActiveRecord::Base
end
task = Task.new(id: '1', completed_on: '2012-10-21')
task.id           # => 1
task.completed_on # => Sun, 21 Oct 2012
task.attributes_before_type_cast
# => {"id"=>"1", "completed_on"=>"2012-10-21", ... }
task.read_attribute_before_type_cast('id')           # => "1"
task.read_attribute_before_type_cast('completed_on') # => "2012-10-21"
In addition to #read_attribute_before_type_cast and #attributes_before_type_cast, it declares a method for all attributes with the *_before_type_cast suffix.
task.id_before_type_cast           # => "1"
task.completed_on_before_type_cast # => "2012-10-21"
Instance Method Summary collapse
- 
  
    
      #attributes_before_type_cast  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns a hash of attributes before typecasting and deserialization. 
- 
  
    
      #attributes_for_database  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns a hash of attributes for assignment to the database. 
- 
  
    
      #read_attribute_before_type_cast(attr_name)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns the value of the attribute identified by attr_namebefore typecasting and deserialization.
- 
  
    
      #read_attribute_for_database(attr_name)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns the value of the attribute identified by attr_nameafter serialization.
Methods included from ActiveSupport::Concern
append_features, class_methods, extended, included, prepend_features, prepended
Instance Method Details
#attributes_before_type_cast ⇒ Object
Returns a hash of attributes before typecasting and deserialization.
class Task < ActiveRecord::Base
end
task = Task.new(title: nil, is_done: true, completed_on: '2012-10-21')
task.attributes
# => {"id"=>nil, "title"=>nil, "is_done"=>true, "completed_on"=>Sun, 21 Oct 2012, "created_at"=>nil, "updated_at"=>nil}
task.attributes_before_type_cast
# => {"id"=>nil, "title"=>nil, "is_done"=>true, "completed_on"=>"2012-10-21", "created_at"=>nil, "updated_at"=>nil}
| 82 83 84 | # File 'activerecord/lib/active_record/attribute_methods/before_type_cast.rb', line 82 def attributes_before_type_cast @attributes.values_before_type_cast end | 
#attributes_for_database ⇒ Object
Returns a hash of attributes for assignment to the database.
| 87 88 89 | # File 'activerecord/lib/active_record/attribute_methods/before_type_cast.rb', line 87 def attributes_for_database @attributes.values_for_database end | 
#read_attribute_before_type_cast(attr_name) ⇒ Object
Returns the value of the attribute identified by attr_name before typecasting and deserialization.
class Task < ActiveRecord::Base
end
task = Task.new(id: '1', completed_on: '2012-10-21')
task.read_attribute('id')                            # => 1
task.read_attribute_before_type_cast('id')           # => '1'
task.read_attribute('completed_on')                  # => Sun, 21 Oct 2012
task.read_attribute_before_type_cast('completed_on') # => "2012-10-21"
task.read_attribute_before_type_cast(:completed_on)  # => "2012-10-21"
| 48 49 50 51 52 53 | # File 'activerecord/lib/active_record/attribute_methods/before_type_cast.rb', line 48 def read_attribute_before_type_cast(attr_name) name = attr_name.to_s name = self.class.attribute_aliases[name] || name attribute_before_type_cast(name) end | 
#read_attribute_for_database(attr_name) ⇒ Object
Returns the value of the attribute identified by attr_name after serialization.
class Book < ActiveRecord::Base
  enum :status, { draft: 1, published: 2 }
end
book = Book.new(status: "published")
book.read_attribute(:status)              # => "published"
book.read_attribute_for_database(:status) # => 2
| 65 66 67 68 69 70 | # File 'activerecord/lib/active_record/attribute_methods/before_type_cast.rb', line 65 def read_attribute_for_database(attr_name) name = attr_name.to_s name = self.class.attribute_aliases[name] || name attribute_for_database(name) end |