Het antwoord van @cschroed werkte niet voor mij in de nieuwste Rails (v4.2). Als we in de Rails-broncode duiken, blijkt dat read_attribute
zal ook de waarde van de primaire sleutel gebruiken als de doorgegeven sleutel gelijk is aan '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
Aangezien de []-methode read_attribute
gebruikt , dit werkt niet meer.
Ik ontdekte dat het rechtstreeks lezen van de attributen-hash werkte:
# LegacyModel class
def other_id
@attributes.fetch_value('id')
end
Dit bood een manier om read_attribute
te omzeilen door _read_attribute
. na te bootsen .