2017-08-08 5 views
0

私は、レベルと呼ばれる属性と1から3の間の整数を持つ瞳孔モデルを持つプロジェクトに取り組んでいます。レベル別のデフォルトのソートは終わっていますライド:Rails - sort_byしかしアクティブなレコード関係を維持する

enum level: { "level_1" => 2, "level_2" => 0, "level_3" => 1 } 

私はこれを変更しないように頼まれました。レベルを昇順で並べ替える必要があり、レベルを返すメソッドlevel_ascを使用して、sort_by:

pupils.sort_by(&:level_asc) 

を使用しています。これの問題は、私のページネッキングを台無しにしている配列を返すことです。

昇順でソートし、以前に述べたルールを無視し、アクティブなレコード関係を返す方法はありますか?

「私は単に〜のクエリは、しかし、私はレール4を使用しています3をマージしようとしたと私はドン:私は...ノー喜びで事前に

EDIT

感謝をattr_accessorsを試してみましたトン完璧に動作します「OR」メソッドへのアクセスがあります。私は、レール4に上記の行を行うためにどのような方法がある場合は

Pupil.where(level: 1).or(where(level: 2)).or(where(level: 3)) 

することは、私はあなたがトンを行うことができます

+0

使用順序はルビーで実行し、配列をソートするために使用されます。 – Crashtor

+0

デフォルトの順序は貼り付けられたコードの最初の行に重ねて表示されています。2 - > 3 - > 1 – Mark

+0

どのデータベースを使用していますか? – skam

答えて

2

をソートすることがあります彼のようなものを使用することによりorder句、中:代わりに、sort_byとしてsort_byの

Pupil.order('level = 2 DESC, level = 0 DESC, level = 1 DESC, id ASC').collect { |pupil| [pupil.id, pupil.level] } 
# Pupil Load (0.9ms) SELECT "pupils".* FROM "pupils" ORDER BY level = 2 DESC, level = 0 DESC, level = 1 DESC, id ASC 
# => [[4, "level_1"], [5, "level_1"], [6, "level_1"], [8, "level_1"], [2, "level_2"], [7, "level_2"], [1, "level_3"], [3, "level_3"], [9, "level_3"], [10, "level_3"]] 
+0

ちょうど試しました - [123、" level_1 "] 'はActiveModel-互換性のあるオブジェクト。 to_partial_pathを実装する必要があります。 – Mark

+0

ええ、出力を見るために最後に追加した 'collect'を削除しましたか?' order'句を表示するために使っていた配列に呼び出されたようです。 –

+0

order( 'level = 2 DESC、level = 0 DESC、レベル= 1 DESC、last_name ASC ')。collect {| pupil | [pupil.id、pupil.level]} – Mark

関連する問題