Mysql
 sql >> база данни >  >> RDS >> Mysql

Rails ActiveRecord обработва колона с идентификатор, която не е първичен ключ

Отговорът от @cschroed не работи за мен в най-новия Rails (v4.2). Ровейки в изходния код на Rails, изглежда, че 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

https://github .com/rails/rails/blob/4-2-stable/activerecord/lib/active_record/attribute_methods/read.rb

Тъй като методът [] използва read_attribute , това вече не работи.

Открих, че директното четене от хеша на атрибутите работи вместо това:

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

Това предостави средство за заобикаляне на read_attribute като имитира _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. Как да извличам 2 пъти в MYSQL PDO без FETCHALL

  2. MySQL - АКТУАЛИЗИРАНЕ на няколко реда с различни стойности в една заявка

  3. Избиране на колона, която също е ключова дума в MySQL

  4. Как да планирам динамична функция с cron задание?

  5. Woocommerce получава идентификатор на продукта, използвайки продуктова SKU