sql >> データベース >  >> RDS >> Mysql

Rails ActiveRecordは、主キーではないid列を処理します

    @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. [メールで保護された]マイクロインスタンスでのmysqlのメモリ消費を削減

    2. クエリが事前にわからない、複数のmysqlコマンドライン呼び出しに対してパスワードを1回入力できますか?

    3. Oracle監査の存続

    4. SQLServer2012で機能しないT-SQLCTEマテリアライズ手法