質問編集履歴

1

質問したいこと、自分で調べたこと、現在起こっていることを追記

2020/12/06 09:52

投稿

Takum
Takum

スコア12

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,49 @@
1
+ ##質問したいこと
2
+
3
+ SQLで実行できたコードをruby on railsのコードに置き換えたいので、それを実現するためのアドバイスを頂きたいです。
4
+
5
+
6
+
7
+ ##自分で調べたこと、実行したこと
8
+
9
+ [http://www.scuttle.io/](http://www.scuttle.io/)
10
+
11
+ こちらのサイトにSQLのコードを打ち込み、railsのコードに変換して、そのコードをcontrollerに貼って実行してみたところ、
12
+
13
+
14
+
15
+ ```ここに言語を入力
16
+
17
+ ActiveRecord::StatementInvalid in Posts#index
18
+
19
+
20
+
21
+ SQLite3::SQLException: no such column: thanks.like_count: SELECT "post_comments"."user_id",
22
+
23
+
24
+
25
+ SUM("thanks"."like_count") AS sum_like_count FROM "post_comments" INNER JOIN "thanks" ON
26
+
27
+
28
+
29
+ "post_comments"."id" = "thanks"."post_comment_id" GROUP BY "post_comments"."user_id"
30
+
31
+
32
+
33
+ ORDER BY "sum_like_count" ASC LIMIT ?
34
+
35
+ ```
36
+
37
+
38
+
39
+ というエラーが表示されています。
40
+
41
+
42
+
43
+
44
+
45
+
46
+
1
47
  ##実現したいこと
2
48
 
3
49
  ruby on railsでポートフォリオを製作中です。そのポートフォリオでランキング機能を実装したいです。
@@ -64,12 +110,20 @@
64
110
 
65
111
  ##railsで置き換えたコード
66
112
 
67
- PostComment.all.select("user_id, sum(thanks.like_count) as sum_like_count").left_joins(Thank.all.select("post_comment_id, count(post_comment_id) as like_count")) as thanks.group(:user_id).order(:sum_like_count).limit(4)
113
+ PostComment.select(
68
114
 
115
+ [
69
116
 
117
+ :user_id, Arel::Nodes::NamedFunction.new('SUM', [Thank.arel_table[:like_count]]).as('sum_like_count')
70
118
 
71
- ##エラーメッセージ
119
+ ]
72
120
 
73
- SyntaxError
121
+ ).joins(
74
122
 
123
+ PostComment.arel_table.join(Thank.arel_table).on(
124
+
75
- /home/vagrant/work/worry/app/controllers/posts_controller.rb:37: syntax error, unexpected tIDENTIFIER, expecting keyword_end )) as thanks ^~
125
+ PostComment.arel_table[:id].eq(Thank.arel_table[:post_comment_id])
126
+
127
+ ).join_sources
128
+
129
+ ).order(:sum_like_count).group(:user_id).limit(4)