跳至内容 跳至搜索

Active Record 属性方法主键

命名空间
方法
I
T

实例公共方法

id()

返回主键列的值。如果主键是复合主键,则返回主键列值数组。

# 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

id=(value)

设置主键列的值。如果主键是复合主键,则在设置的值不可枚举时引发 TypeError。

# 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

id?()

查询主键列的值。如果主键是复合主键,则必须可以查询所有主键列值。

# 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

id_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

id_in_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

id_was()

返回主键列的先前值。如果主键是复合主键,则返回主键列先前值的数组。

# 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

to_key()

如果存在,则返回用数组包装的此记录的主键值。

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