2017-08-31 4 views
0

私はextraというモデルを持っています。ここでそれはどのように見えるのですか?レールどこで同じテーブルをソートして組み合わせます

#<Extra id: nil, name: nil, price: nil, per: nil, compulsory: nil, online_payment: nil, payment_per_person: nil, is_included: nil, created_at: nil, updated_at: nil, user_id: nil> 

私が最初にそれが真実であるis_includedによってそれらをソートしたいと思います。次に、compulsoryが真、最後にcompulsoryが偽であるところをソートしたいと思います。それから私はそれらを結合したい。

基本的には、ユーザーは順序付けられていないものを保存できるので、グループ化したいと考えています。その後、誰かが2回存在する場合は削除します。

私はviewまたはbefore_saveコールバックで行いますか?

おかげ

答えて

2

Extra.order('is_included desc, compulsory desc')は、ご希望の結果を返しますし、あなたは、ビュー上でSQLクエリを実行することはありません。

+0

また、trueまたはfalseを指定せずにdescを並べ替えることで、どのように動作するか説明できますか? –

+1

ここにはあなたにアイデアを与える[リンク](https://dba.stackexchange.com/questions/8504/why-are-nulls-sorted-first)があります。 trueおよびfalseの値は1および0として格納されます。したがって、**降順で** is_includedをソートすると、降順でエクストラがソートされ、**結果**に強制的な属性でソートが適用されます。降順にすると最終結果が得られます。 私があなたと共有したリンクは、ブール値でのNull値のソートの理解に役立ちます。 –

関連する問題