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

並べ替え可能なUUIDとActiveRecord::Baseのオーバーライド

    まず、 first および last 思っているほど単純ではありません。limitを完全に無視しています。 これらの方法の両方がサポートするという議論。

    次に、scope これは、クエリを返すことを目的としたクラスメソッドを追加するための凝った方法にすぎません。スコープがscopeを悪用しています クエリではなく単一のモデルインスタンスを返すためです。 scopeを使用したくない まったく、あなたはfirstを置き換えようとしているだけです およびlast クラスメソッドなので、単にオーバーライドしてみませんか?ただし、それらを適切にオーバーライドする必要があります。そのためには、Railsソースを読んで理解し、 find_nth_with_limit します。 secondを上書きする必要があります 、third 、...そしてあなたがそれにいる間のそれらの愚かな方法の残り。

    firstを置き換えるのが適切でないと思われる場合 およびlast (良いことIMO)次に、デフォルトのスコープを追加して、必要に応じて注文することができます:

    default_scope -> { order(:created_at) }
    

    もちろん、デフォルトのスコープには独自の問題があり、このようにORDER BYに忍び込むと、おそらくreorder 実際にORDERBYを指定したいときはいつでも; orderへの複数の呼び出しを覚えておいてください 新しい注文条件を追加します。すでに存在するものは置き換えられません。

    または、Rails6 +を使用している場合は、Markusのimplicit_order_columnを使用できます。 ソリューション デフォルトのスコープが引き起こす可能性のあるすべての問題を回避するため。

    私はあなたがこれについてすべて間違っていると思います。 M.firstが表示されたときはいつでも 何か忘れられたと思います。 idで並べ替える はほとんど役に立たないので、常にする必要があります firstなどの方法を使用する前に、必要な順序を手動で指定します およびlast



    1. SQLServerの単一データベースのデフォルトの日時形式を変更する

    2. Hibernateはnull値のリストを返します(リストタイプのOneToManyアノテーション)

    3. MySQL:単純なテーブルでの(スレッドを介した)同時更新

    4. このEXPLAINでキーが使用されていないのはなぜですか?