Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Rails ActiveRecord xử lý một cột id không phải là khóa chính

Câu trả lời của @cschroed không phù hợp với tôi trong Rails mới nhất (v4.2). Tìm hiểu kỹ mã nguồn Rails, có vẻ như read_attribute cũng sẽ sử dụng giá trị khóa chính nếu khóa được truyền bằng '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-ổn định / activerecord / lib / active_record / thuộc tính_methods / read.rb

Vì, phương thức [] sử dụng read_attribute , điều này không còn hoạt động.

Thay vào đó, tôi nhận thấy rằng việc đọc trực tiếp từ băm thuộc tính đã hoạt động:

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

Điều này cung cấp một phương tiện bỏ qua read_attribute bằng cách bắt chước _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. Homebrew MySQL 8.0.18 trên macOS 10.15 Catalina sẽ không chạy dưới dạng dịch vụ

  2. Thoát thẻ hoang dã MySQL

  3. Chèn bằng PreparedStatement. Làm cách nào để tự động tăng ID?

  4. Nhập cơ sở dữ liệu MySQL vào MS SQL Server

  5. Làm cách nào để bạn sử dụng tốt các CPU đa lõi trong các ứng dụng PHP / MySQL của mình?