नवीनतम रेल (v4.2) में @cschroed द्वारा उत्तर मेरे लिए काम नहीं किया। रेल स्रोत कोड में खुदाई करने पर, ऐसा प्रतीत होता है कि read_attribute
यदि पास की गई कुंजी '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
चूंकि, [] विधि read_attribute
. का उपयोग करती है , यह अब काम नहीं करता।
मैंने पाया कि विशेषताओं से सीधे पढ़ने के बजाय हैश ने काम किया:
# LegacyModel class
def other_id
@attributes.fetch_value('id')
end
इसने read_attribute
. को दरकिनार करने का एक माध्यम प्रदान किया _read_attribute
. की नकल करके ।