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

それ自体とのオプションのhas_oneアソシエーションのスコープ

    私は最初、purchaseという用語に混乱しました。 およびsale 。しかし、あなたのアップデートは私が問題をより理解するのに役立ったと私は信じています。

    だから私が理解したのは、売れ残ったものは購入から販売を差し引いたものです。以下にそのリストを示します:

    scope :unsold, lambda {includes(:sale).select { |p| !p.sale.present? } }
    

    更新:

    ここで起こっていることの簡単な説明:

    スコープは、実際にはデータベース内のすべての作業を実行するわけではありません。最初に、参加した販売を含むすべての購入のSQL選択を行います。これにより、purchaseのすべてのレコードが得られます テーブル。次に、このスコープはRuby Arrayにフォールバックします selectで 方法。このメソッドは、すべての購入を返しますp saleなし これは、販売で購入を否定することによって行われます。

    これにより、スコープが少し実行していることが明らかになることを願っています。

    更新2:

    連鎖可能なスコープ!

    scope :unsold, lambda { where('id not in (?)', Sale.pluck(:linked_indent_id)) }
    

    このスコープでは、id saleにない購入の のlinked_indent_id が選択されています。



    1. Insert ... ON DUPLICATE KEY UPDATEusingknexを使用して複数の行を追加する方法

    2. SelectクエリのOFFSET-FETCHオプションによるフィルタリング-SQLServer/TSQLチュートリアルパート118

    3. [ERROR] InnoDB:mysqlのファイル操作でのオペレーティングシステムエラー番号87を解決するにはどうすればよいですか?

    4. データベースへの直接ストリーミング