Module: ActiveRecord::AttributeMethods::PrimaryKey

Extended by:
ActiveSupport::Concern
Defined in:
lib/active_record/attribute_methods/primary_key.rb

Overview

Active Record Attribute Methods Primary Key

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#idObject

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



20
21
22
23
24
# File '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

#id=(value) ⇒ Object

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



34
35
36
37
38
39
40
41
# File '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

#id?Boolean

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

Returns:

  • (Boolean)


45
46
47
48
49
50
51
# File '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

#id_before_type_castObject

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.



55
56
57
58
59
60
61
# File '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

#id_for_databaseObject

:nodoc:



83
84
85
86
87
88
89
# File 'lib/active_record/attribute_methods/primary_key.rb', line 83

def id_for_database # :nodoc:
  if self.class.composite_primary_key?
    @primary_key.map { |col| @attributes[col].value_for_database }
  else
    @attributes[@primary_key].value_for_database
  end
end

#id_in_databaseObject

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.



75
76
77
78
79
80
81
# File '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

#id_wasObject

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



65
66
67
68
69
70
71
# File '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

#primary_key_values_present?Boolean

:nodoc:

Returns:

  • (Boolean)


26
27
28
29
30
# File 'lib/active_record/attribute_methods/primary_key.rb', line 26

def primary_key_values_present? # :nodoc:
  return id.all? if self.class.composite_primary_key?

  !!id
end

#to_keyObject

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



13
14
15
16
# File 'lib/active_record/attribute_methods/primary_key.rb', line 13

def to_key
  key = id
  Array(key) if key
end