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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

189閲覧

文字列に順番を付けて表示することは可能でしょうか?【Ruby on Rails】

Java_student

総合スコア86

SQL

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

Ruby on Rails

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

1グッド

0クリップ

投稿2025/02/12 20:46

編集2025/02/14 03:24

実現したいこと

タスク管理機能で優先度の高さから表示されるようにしたいです。
最高、高、中、低の順番でタスクが表示されるようにしたいです。
最高などの文字列を入れておくカラムからソートしようと思っています。

カラム名はstatusです。

発生している問題・エラーメッセージ

タスクの優先度順に表示を変更・ソートできない。

該当のソースコード

TasksController

1@tasks = Task.where(project_id: @project.id).order(id: :desc)

試したこと

.order(status: '最高', '高, '中', '低')で試したのですが、ダメでした。

補足情報(FW/ツールのバージョンなど)

ruby 3
rails 6

tatsu99👍を押しています

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

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

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

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

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

utm.

2025/02/13 14:13

SQLの質問でしたら、普通に考えると 優先度マスターのようなものを作り、 主キー、名前、順番 をそれぞれ持たせ、 主キーはタスクテーブルにて外部キーとして使い、並び替えると表示を行うのが妥当かと思います。 (そもそもシンプルなタスク管理ならExcelで良い気もする)
guest

回答2

0

ベストアンサー

SQLでゴリ押すならCASE文で数値を割り振ってソートする方法がありますね

ruby

1@tasks = Task.where(project_id: @project.id) 2 .order(Arel.sql(" 3 CASE 4 WHEN status = '最高' THEN 1 5 WHEN status = '高' THEN 2 6 WHEN status = '中' THEN 3 7 WHEN status = '低' THEN 4 8 END, id DESC 9 "))

投稿2025/02/15 07:38

taku0012

総合スコア18

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

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

0

最高、高、中、低 というのは日本人に取っては 優先度の高い順 と理解できますが、
SQL での order は 文字codeで行うので、その順にはなりません

%w[最高 高 中 低].sort => ["中", "低", "最高", "高"]

という並び順になるでしょう。
読み込んでから RUBY の sort で並べ直すか、
最高 高 中 低 でなく 1最高 2高 3中 4低 と数字などを接頭するか
[" 低", " 中", " 高", "最高"] と空白文字で接頭するか。

もしかすると SQL の order_by に 「最高を1に読み替えて」みたいな機能が有るかも。
タグに「SQL」を追加して識者召喚して

投稿2025/02/13 13:12

winterboum

総合スコア23616

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.33%

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

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

質問する

関連した質問