A resposta de @cschroed não funcionou para mim no Rails mais recente (v4.2). Cavando no código-fonte do Rails, parece que
read_attribute
também usará o valor da chave primária se a chave passada for igual a 'id': ID = 'id'.freeze
# Returns the value of the attribute identified by <tt>attr_name</tt> after
# it has been typecast (for example, "2004-12-12" in a date column is cast
# to a date object, like Date.new(2004, 12, 12)).
def read_attribute(attr_name, &block)
name = attr_name.to_s
name = self.class.primary_key if name == ID
_read_attribute(name, &block)
end
https://github .com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/attribute_methods/read.rb
Como o método [] usa
read_attribute
, isso não funciona mais. Descobri que a leitura direta do hash de atributos funcionou:
# LegacyModel class
def other_id
@attributes.fetch_value('id')
end
Isso forneceu um meio de ignorar
read_attribute
imitando _read_attribute
.