Active Record Attribute Methods
- MODULE ActiveRecord::AttributeMethods::BeforeTypeCast
- MODULE ActiveRecord::AttributeMethods::ClassMethods
- MODULE ActiveRecord::AttributeMethods::PrimaryKey
- MODULE ActiveRecord::AttributeMethods::Query
- MODULE ActiveRecord::AttributeMethods::Read
- MODULE ActiveRecord::AttributeMethods::Serialization
- MODULE ActiveRecord::AttributeMethods::TimeZoneConversion
- MODULE ActiveRecord::AttributeMethods::Write
- #
- A
- C
- H
- R
- ActiveModel::AttributeMethods
- ActiveRecord::AttributeMethods::Read
- ActiveRecord::AttributeMethods::Write
- ActiveRecord::AttributeMethods::BeforeTypeCast
- ActiveRecord::AttributeMethods::Query
- ActiveRecord::AttributeMethods::PrimaryKey
- ActiveRecord::AttributeMethods::TimeZoneConversion
- ActiveRecord::AttributeMethods::Serialization
Returns the value of the attribute identified by attr_name
after it has been typecast (for example, “2004-12-12” in a data column is
cast to a date object, like Date.new(2004, 12, 12)). It raises
ActiveModel::MissingAttributeError if the identified attribute
is missing.
Alias for the read_attribute method.
class Person < ActiveRecord::Base belongs_to :organization end person = Person.new(name: 'Francesco', age: '22') person[:name] # => "Francesco" person[:age] # => 22 person = Person.select('id').first person[:name] # => ActiveModel::MissingAttributeError: missing attribute: name person[:organization_id] # => ActiveModel::MissingAttributeError: missing attribute: organization_id
Updates the attribute identified by attr_name with the
specified value. (Alias for the protected
write_attribute method).
class Person < ActiveRecord::Base end person = Person.new person[:age] = '22' person[:age] # => 22 person[:age] # => Fixnum
Returns an #inspect-like string for the value of the attribute
attr_name. String attributes are
truncated upto 50 characters, and Date and Time attributes are returned in the
:db format. Other attributes return the value of
#inspect without modification.
person = Person.create!(name: 'David Heinemeier Hansson ' * 3) person.attribute_for_inspect(:name) # => "\"David Heinemeier Hansson David Heinemeier Hansson D...\"" person.attribute_for_inspect(:created_at) # => "\"2012-10-22 00:15:07\""
# File activerecord/lib/active_record/attribute_methods.rb, line 236 def attribute_for_inspect(attr_name) value = read_attribute(attr_name) if value.is_a?(String) && value.length > 50 "#{value[0..50]}...".inspect elsif value.is_a?(Date) || value.is_a?(Time) %Q("#{value.to_s(:db)}") else value.inspect end end
Returns an array of names for the attributes available on this object.
class Person < ActiveRecord::Base end person = Person.new person.attribute_names # => ["id", "created_at", "updated_at", "name", "age"]
Returns true if the specified attribute has been
set by the user or by a database load and is neither nil nor
empty? (the latter only applies to objects that respond to
empty?, most notably Strings). Otherwise, false.
Note that it always returns true with boolean attributes.
class Task < ActiveRecord::Base end person = Task.new(title: '', is_done: false) person.attribute_present?(:title) # => false person.attribute_present?(:is_done) # => true person.name = 'Francesco' person.is_done = true person.attribute_present?(:title) # => true person.attribute_present?(:is_done) # => true
Returns a hash of all the attributes with their names as keys and the values of the attributes as values.
class Person < ActiveRecord::Base end person = Person.create(name: 'Francesco', age: 22) person.attributes # => {"id"=>3, "created_at"=>Sun, 21 Oct 2012 04:53:04, "updated_at"=>Sun, 21 Oct 2012 04:53:04, "name"=>"Francesco", "age"=>22}
Returns the column object for the named attribute. Returns nil
if the named attribute not exists.
class Person < ActiveRecord::Base end person = Person.new person.column_for_attribute(:name) # the result depends on the ConnectionAdapter # => #<ActiveRecord::ConnectionAdapters::SQLite3Column:0x007ff4ab083980 @name="name", @sql_type="varchar(255)", @null=true, ...> person.column_for_attribute(:nothing) # => nil
Returns true if the given attribute is in the attributes hash,
otherwise false.
class Person < ActiveRecord::Base end person = Person.new person.has_attribute?(:name) # => true person.has_attribute?('age') # => true person.has_attribute?(:nothing) # => false
A Person object with a name attribute can ask
person.respond_to?(:name),
person.respond_to?(:name=), and
person.respond_to?(:name?) which will all return
true. It also define the attribute methods if they have not
been generated.
class Person < ActiveRecord::Base end person = Person.new person.respond_to(:name) # => true person.respond_to(:name=) # => true person.respond_to(:name?) # => true person.respond_to('age') # => true person.respond_to('age=') # => true person.respond_to('age?') # => true person.respond_to(:nothing) # => false
# File activerecord/lib/active_record/attribute_methods.rb, line 165 def respond_to?(name, include_private = false) name = name.to_s self.class.define_attribute_methods unless self.class.attribute_methods_generated? result = super # If the result is false the answer is false. return false unless result # If the result is true then check for the select case. # For queries selecting a subset of columns, return false for unselected columns. # We check defined?(@attributes) not to issue warnings if called on objects that # have been allocated but not yet initialized. if defined?(@attributes) && @attributes.present? && self.class.column_names.include?(name) return has_attribute?(name) end return true end