module ActiveRecord::AttributeMethods::PrimaryKey

Active Record Attribute Methods Primary Key

Public Instance Methods

Returns the primary key column’s value. If the primary key is composite, returns an array of the primary key column values.

# File activerecord/lib/active_record/attribute_methods/primary_key.rb, line 20
def id
  return _read_attribute(@primary_key) unless @primary_key.is_a?(Array)

  @primary_key.map { |pk| _read_attribute(pk) }
end

Sets the primary key column’s value. If the primary key is composite, raises TypeError when the set value not enumerable.

# File activerecord/lib/active_record/attribute_methods/primary_key.rb, line 34
def id=(value)
  if self.class.composite_primary_key?
    raise TypeError, "Expected value matching #{self.class.primary_key.inspect}, got #{value.inspect}." unless value.is_a?(Enumerable)
    @primary_key.zip(value) { |attr, value| _write_attribute(attr, value) }
  else
    _write_attribute(@primary_key, value)
  end
end

Queries the primary key column’s value. If the primary key is composite, all primary key column values must be queryable.

# File activerecord/lib/active_record/attribute_methods/primary_key.rb, line 45
def id?
  if self.class.composite_primary_key?
    @primary_key.all? { |col| _query_attribute(col) }
  else
    _query_attribute(@primary_key)
  end
end

Returns the primary key column’s value before type cast. If the primary key is composite, returns an array of primary key column values before type cast.

# File activerecord/lib/active_record/attribute_methods/primary_key.rb, line 55
def id_before_type_cast
  if self.class.composite_primary_key?
    @primary_key.map { |col| attribute_before_type_cast(col) }
  else
    attribute_before_type_cast(@primary_key)
  end
end

Returns the primary key column’s value from the database. If the primary key is composite, returns an array of primary key column values from database.

# File activerecord/lib/active_record/attribute_methods/primary_key.rb, line 75
def id_in_database
  if self.class.composite_primary_key?
    @primary_key.map { |col| attribute_in_database(col) }
  else
    attribute_in_database(@primary_key)
  end
end

Returns the primary key column’s previous value. If the primary key is composite, returns an array of primary key column previous values.

# File activerecord/lib/active_record/attribute_methods/primary_key.rb, line 65
def id_was
  if self.class.composite_primary_key?
    @primary_key.map { |col| attribute_was(col) }
  else
    attribute_was(@primary_key)
  end
end

Returns this record’s primary key value wrapped in an array if one is available.

# File activerecord/lib/active_record/attribute_methods/primary_key.rb, line 13
def to_key
  key = id
  Array(key) if key
end