Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Rails ActiveRecord menangani kolom id yang bukan kunci utama

Jawaban oleh @cschroed tidak berfungsi untuk saya di Rails terbaru (v4.2). Menggali kode sumber Rails, tampaknya read_attribute juga akan menggunakan nilai kunci utama jika kunci yang diteruskan sama dengan '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

Karena, metode [] menggunakan read_attribute , ini tidak lagi berfungsi.

Saya menemukan bahwa membaca langsung dari atribut hash berfungsi sebagai gantinya:

# LegacyModel class
def other_id
  @attributes.fetch_value('id')
end

Ini menyediakan cara untuk melewati read_attribute dengan meniru _read_attribute .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengikat alamat dan server MySQL

  2. Dialek hibernasi untuk MySQL 8?

  3. Lokasi MySQL my.ini

  4. Teks bahasa Bengali tidak ditampilkan dalam file CSV Unicode

  5. Bergabung dengan dua tabel serupa di MySQL