sql >> Databáze >  >> RDS >> Mysql

Rails ActiveRecord zpracovává sloupec id, který není primárním klíčem

Odpověď od @cschroed mi v nejnovějších Rails (v4.2) nefungovala. Při kopání do zdrojového kódu Rails se zdá, že read_attribute bude také používat hodnotu primárního klíče, pokud se předaný klíč rovná '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

Protože metoda [] používá read_attribute , toto již nefunguje.

Zjistil jsem, že místo toho fungovalo přímé čtení hash atributů:

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

To poskytlo způsob, jak obejít read_attribute napodobením _read_attribute .



  1. Vrátit se do readline verze 6.x v Homebrew a opravit Postgresql?

  2. Aktualizujte součet na základě předchozího řádku zůstatku

  3. doctrine2 a group_concat

  4. Fulltextové vyhledávání v Postgres nebo CouchDB?