Module: ActiveRecord::AttributeMethods::CompositePrimaryKey

Defined in:
lib/active_record/attribute_methods/composite_primary_key.rb

Overview

:nodoc:

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.



8
9
10
11
12
13
14
# File 'lib/active_record/attribute_methods/composite_primary_key.rb', line 8

def id
  if self.class.composite_primary_key?
    @primary_key.map { |pk| _read_attribute(pk) }
  else
    super
  end
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.



26
27
28
29
30
31
32
33
# File 'lib/active_record/attribute_methods/composite_primary_key.rb', line 26

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
    super
  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)


37
38
39
40
41
42
43
# File 'lib/active_record/attribute_methods/composite_primary_key.rb', line 37

def id?
  if self.class.composite_primary_key?
    @primary_key.all? { |col| _query_attribute(col) }
  else
    super
  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.



47
48
49
50
51
52
53
# File 'lib/active_record/attribute_methods/composite_primary_key.rb', line 47

def id_before_type_cast
  if self.class.composite_primary_key?
    @primary_key.map { |col| attribute_before_type_cast(col) }
  else
    super
  end
end

#id_for_databaseObject

:nodoc:



75
76
77
78
79
80
81
# File 'lib/active_record/attribute_methods/composite_primary_key.rb', line 75

def id_for_database # :nodoc:
  if self.class.composite_primary_key?
    @primary_key.map { |col| @attributes[col].value_for_database }
  else
    super
  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.



67
68
69
70
71
72
73
# File 'lib/active_record/attribute_methods/composite_primary_key.rb', line 67

def id_in_database
  if self.class.composite_primary_key?
    @primary_key.map { |col| attribute_in_database(col) }
  else
    super
  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.



57
58
59
60
61
62
63
# File 'lib/active_record/attribute_methods/composite_primary_key.rb', line 57

def id_was
  if self.class.composite_primary_key?
    @primary_key.map { |col| attribute_was(col) }
  else
    super
  end
end

#primary_key_values_present?Boolean

:nodoc:

Returns:

  • (Boolean)


16
17
18
19
20
21
22
# File 'lib/active_record/attribute_methods/composite_primary_key.rb', line 16

def primary_key_values_present? # :nodoc:
  if self.class.composite_primary_key?
    id.all?
  else
    super
  end
end