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

最大のhas_manyリレーションのみで結合し、そのリレーションに選択フィルターを含むクエリをRuby on Railsで構築するにはどうすればよいですか?

    大量の行があるアプリケーションでまったく同じ問題にかなり苦労しました。横方向の結合やサブクエリなどのさまざまな新しいソリューションを試した後、最もパフォーマンスが高く、はるかに簡単なソリューションは、ポイントするテーブルに外部キーを追加することでした。最新の行に移動し、関連付けコールバック(またはdbトリガー> )外部キーを設定します。

    class AddLatestEmploymentToEmployees < ActiveRecord::Migration[6.0]
      def change
        add_reference :employees, :latest_employment, foreign_key: { to_table: :employments }
      end
    end
    
    class Employee < ActiveRecord::Base
      has_many :employments, after_add: :set_latest_employment
      belongs_to :latest_employment, 
        class_name: 'Employment',
        optional: true
    
      private
      def set_latest_employment(employment)
        update_column(:latest_employment_id, employment.id)
      end 
    end
    
    Employee.joins(:latest_employment)
            .where(employments: { status: :active })
    

    has_many全体をロードした場合に発生するメモリの問題なしに最新のレコードを熱心にロードできるため、私の場合のように関連するレコードの量が膨大な場合は本当に輝いています。 協会。



    1. RAILS:すべての関連付けにnull以外の属性を持つすべてのオブジェクトをクエリする方法

    2. そのシークで実際に何が起こっているのですか?

    3. 重複するresluts

    4. MySQLデータベースに日付をどのように保存しますか?