質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

1273閲覧

SQLのコードをRailsのコードに置き換えたい

Takumim

総合スコア12

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

2クリップ

投稿2020/12/05 10:07

編集2020/12/06 09:52

##質問したいこと
SQLで実行できたコードをruby on railsのコードに置き換えたいので、それを実現するためのアドバイスを頂きたいです。

##自分で調べたこと、実行したこと
http://www.scuttle.io/
こちらのサイトにSQLのコードを打ち込み、railsのコードに変換して、そのコードをcontrollerに貼って実行してみたところ、

ActiveRecord::StatementInvalid in Posts#index SQLite3::SQLException: no such column: thanks.like_count: SELECT "post_comments"."user_id", SUM("thanks"."like_count") AS sum_like_count FROM "post_comments" INNER JOIN "thanks" ON "post_comments"."id" = "thanks"."post_comment_id" GROUP BY "post_comments"."user_id" ORDER BY "sum_like_count" ASC LIMIT ?

というエラーが表示されています。

##実現したいこと
ruby on railsでポートフォリオを製作中です。そのポートフォリオでランキング機能を実装したいです。
ランキング機能の詳細ですが、記事を投稿し、他の人がその記事にコメントが出来ます。記事の投稿者はそのコメントが有益だと感じれば、ありがとうを押す事が出来ます。そのいいねを多く取得しているユーザーをランキング化したいです。
少し複雑なランキング機能になっているので、データベースをSQL文で操作し、意図するデータを取り出す事が出来ました。
ただ、そのSQLをrailsのコードに置き換えたときにシンタックスエラーが表示されます。

##SQLのコード
select user_id, sum(thanks.like_count) as sum_like_count
from post_comments
left join (
select post_comment_id, count(post_comment_id) as like_count
from thanks
group by post_comment_id
) as thanks
on post_comments.id = thanks.post_comment_id
group by user_id
order by sum_like_count
limit 4;
+---------+----------------+
| user_id | sum_like_count |
+---------+----------------+
| 1 | 1 |
| 3 | 2 |
| 7 | 3 |
| 8 | 3 |
+---------+----------------+
4 rows in set (0.00 sec)

この場合、user_id = 7,8が1位、
user_id = 3が3位、
user_id = 1が4位になります。

##railsで置き換えたコード
PostComment.select(
[
:user_id, Arel::Nodes::NamedFunction.new('SUM', [Thank.arel_table[:like_count]]).as('sum_like_count')
]
).joins(
PostComment.arel_table.join(Thank.arel_table).on(
PostComment.arel_table[:id].eq(Thank.arel_table[:post_comment_id])
).join_sources
).order(:sum_like_count).group(:user_id).limit(4)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2020/12/05 10:40

起こったことだけ書いても意味がわかりません。 エラーメッセージ読んだら何が起きてるのかぐらいは調べられると思うけど、いったい何を質問したいんでしょう? エラーを書けば誰かが勝手に直してくれる作業代行サイトと思ってませんか?
Takumim

2020/12/05 11:04 編集

コメントありがとうございます。 SQLではやりたいことを実現できたので、railsでそれを同じように実現するにはどうすればいいのでしょうかという質問です。 作業代行サイトと思っていませんが、知見のある方々のアドバイスを頂くためのサイトであると認識しています。 何か足りないところがあれば修正させて頂きますので、教えて頂きたいです。
gentaro

2020/12/05 23:54 編集

だったら質問文を修正して「質問したいこと」を書いてください。 現状では「エラーが起きました」という事しか伝わりません。 なお、質問ガイドラインを読み、ちゃんと質問までに自分が何を調べ、どの点について質問したいのか、が伝わる明確な文章にしてください。
Takumim

2020/12/06 08:27

そうですね、おっしゃる通りだと思います。 すぐに記載頂いた通りに対応させて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問