回答編集履歴

6

追記

2020/07/01 00:39

投稿

winterboum
winterboum

スコア23567

test CHANGED
@@ -47,3 +47,19 @@
47
47
  で行けるかなぁ。
48
48
 
49
49
  user_idの重複をどう扱うのかな、~~
50
+
51
+ Songか、うっかりしてました。
52
+
53
+ ```
54
+
55
+ Song.joins(chords: :practices).
56
+
57
+ sort_by{|song|
58
+
59
+ song.chords.map{|chord| chord.practices.map(&:user_id)}.
60
+
61
+ flatten.uniq.size}
62
+
63
+ ```
64
+
65
+ では? あれ、、、、 N+1 になってたら includesの方でも試してください。

5

修正

2020/07/01 00:39

投稿

winterboum
winterboum

スコア23567

test CHANGED
@@ -38,10 +38,12 @@
38
38
 
39
39
 
40
40
 
41
+ だめっぽい
42
+
41
- で、真面目に①に取り組むと
43
+ ~~で、真面目に①に取り組むと
42
44
 
43
45
  song.chords.joins(:practices).group('practices.chord_id').order(count('practices.user_id'))
44
46
 
45
47
  で行けるかなぁ。
46
48
 
47
- user_idの重複をどう扱うのかな、
49
+ user_idの重複をどう扱うのかな、~~

4

一部修正

2020/06/30 01:28

投稿

winterboum
winterboum

スコア23567

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  で、真面目に①に取り組むと
42
42
 
43
- song.chords.joins(:practices).group('practices.user_id').order(count('practices.user_id'))
43
+ song.chords.joins(:practices).group('practices.chord_id').order(count('practices.user_id'))
44
44
 
45
45
  で行けるかなぁ。
46
46
 

3

追記

2020/06/30 01:24

投稿

winterboum
winterboum

スコア23567

test CHANGED
@@ -31,3 +31,17 @@
31
31
  ```
32
32
 
33
33
  で。
34
+
35
+
36
+
37
+ なお、`song[:song_practices] = song.chords.....` ではDBに反映されませんから「テーブルにそんなカラムはないよエラー」になります。仮想属性を使うなら、一度のアクセスで解決しないとだめです。
38
+
39
+
40
+
41
+ で、真面目に①に取り組むと
42
+
43
+ song.chords.joins(:practices).group('practices.user_id').order(count('practices.user_id'))
44
+
45
+ で行けるかなぁ。
46
+
47
+ user_idの重複をどう扱うのかな、

2

追記

2020/06/30 01:21

投稿

winterboum
winterboum

スコア23567

test CHANGED
@@ -21,3 +21,13 @@
21
21
  pageingが必要な場合は(私の実力では)ちと厄介。
22
22
 
23
23
  pagingが不要なら、③連想配列に対してインスタンスメソッドを定義しないでも可能です
24
+
25
+ ```
26
+
27
+ chords = song.chords.joins(:practices).
28
+
29
+ sort_by{|chord| chord.practices.map(&:user_id).uniq.size}
30
+
31
+ ```
32
+
33
+ で。

1

追記

2020/06/30 01:12

投稿

winterboum
winterboum

スコア23567

test CHANGED
@@ -13,3 +13,11 @@
13
13
  a.c # => 3
14
14
 
15
15
  ```
16
+
17
+
18
+
19
+ ただこれですと、pagingはできないですね。
20
+
21
+ pageingが必要な場合は(私の実力では)ちと厄介。
22
+
23
+ pagingが不要なら、③連想配列に対してインスタンスメソッドを定義しないでも可能です