回答編集履歴

2

<=> 演算子の再定義について記述を追加

2019/02/27 09:24

投稿

tacsheaven
tacsheaven

スコア13703

test CHANGED
@@ -45,3 +45,27 @@
45
45
  もう一つの手としては、ActiveRecord の戻り値となるオブジェクトに、 あらかじめ <=> 演算子を再定義(これが容量表現を解釈して数値化して比較する)してやって、それを使って sort_by() かけてやるとか。
46
46
 
47
47
  ※ソートの比較関数を定義してやるわけです
48
+
49
+
50
+
51
+ ActiveRecord の定義
52
+
53
+ ```Ruby
54
+
55
+ class Record < ApplicationRecord
56
+
57
+ def <=>(other)
58
+
59
+ // self.~ と other.~ を使って、比較をする
60
+
61
+   // 最終的に self の方が前に来るなら -1 を、後に来るなら 1 を、一致するなら 0 を return する
62
+
63
+ end
64
+
65
+ end
66
+
67
+ ```
68
+
69
+ こんな風に ActiveRecord に <=> 演算子を定義してやります。
70
+
71
+ そうすると ActiveRecord を(配列で)全件取り出したところで、配列.sort() としてやれば、いちいち変換などせずとも(比較関数の中で変換することで)解釈してソートしてくれます。

1

比較関数を定義する方法を追加記述

2019/02/27 09:24

投稿

tacsheaven
tacsheaven

スコア13703

test CHANGED
@@ -37,3 +37,11 @@
37
37
 
38
38
 
39
39
  基本、RoR というより DB 側の領分ですね。
40
+
41
+
42
+
43
+
44
+
45
+ もう一つの手としては、ActiveRecord の戻り値となるオブジェクトに、 あらかじめ <=> 演算子を再定義(これが容量表現を解釈して数値化して比較する)してやって、それを使って sort_by() かけてやるとか。
46
+
47
+ ※ソートの比較関数を定義してやるわけです