123456789_123456789_123456789_123456789_123456789_

Module: ActiveRecord::AttributeMethods::Read

Relationships & Source Files
Namespace Children
Modules:
Extension / Inclusion / Inheritance Descendants
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Defined in: activerecord/lib/active_record/attribute_methods/read.rb

Constant Summary

  • ID =
    # File 'activerecord/lib/active_record/attribute_methods/read.rb', line 79
    'id'.freeze
  • ReaderMethodCache =
    # File 'activerecord/lib/active_record/attribute_methods/read.rb', line 6
    Class.new(AttributeMethodCache) {
      private
      # We want to generate the methods via module_eval rather than
      # define_method, because define_method is slower on dispatch.
      # Evaluating many similar methods may use more memory as the instruction
      # sequences are duplicated and cached (in MRI).  define_method may
      # be slower on dispatch, but if you're careful about the closure
      # created, then define_method will consume much less memory.
      #
      # But sometimes the database might return columns with
      # characters that are not allowed in normal method names (like
      # 'my_column(omg)'. So to work around this we first define with
      # the __temp__ identifier, and then use alias method to rename
      # it to what we want.
      #
      # We are also defining a constant to hold the frozen string of
      # the attribute name. Using a constant means that we do not have
      # to allocate an object on each call to the attribute method.
      # Making it frozen means that it doesn't get duped when used to
      # key the @attributes in read_attribute.
      def method_body(method_name, const_name)
        <<-EOMETHOD
        def #{method_name}
          name = ::ActiveRecord::AttributeMethods::AttrNames::ATTR_#{const_name}
          _read_attribute(name) { |n| missing_attribute(n, caller) }
        end
        EOMETHOD
      end
    }.new

Class Method Summary

Instance Method Summary

  • #read_attribute(attr_name, &block)

    Returns the value of the attribute identified by attr_name after it has been typecast (for example, “2004-12-12” in a date column is cast to a date object, like Date.new(2004, 12, 12)).

Instance Method Details

#read_attribute(attr_name, &block)

Returns the value of the attribute identified by attr_name after it has been typecast (for example, “2004-12-12” in a date column is cast to a date object, like Date.new(2004, 12, 12)).

[ GitHub ]

  
# File 'activerecord/lib/active_record/attribute_methods/read.rb', line 84

def read_attribute(attr_name, &block)
  name = attr_name.to_s
  name = self.class.primary_key if name == ID
  _read_attribute(name, &block)
end