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

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

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

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

Ruby on Rails

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

3828閲覧

railsのactiverecordのorderで、ハイフンを挟んだ数字の昇順で値を取得する方法について

nimbus1978

総合スコア14

Ruby

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

Ruby on Rails

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2015/12/14 07:42

編集2015/12/14 07:45

railsのactiverecordのorderについての質問です。

Bookモデルの中のboxidというカラムの内容が[11-1,2-1,10-1,3-4]のようにハイフンを挟んだ数字の形式であるときに、boxidを昇順にBookモデルの値を取得しようと

@book = Book.all.order("boxid")

としたところ、boxidが、[10-1,11-1,2-1,3-4]の順番で値を取ってきてしまいました。そこで

@book = Book.all.sort_by{"boxid"}

とすると、ちゃんとboxidが [2-1,3-4,10-1,11-1]の順でBookの値を取得できたのですが、
@bookが配列になってしまい、その後の処理に支障をきたしてしまいました。

@bookがActiveRecord_Relationクラスのまま、boxidが、ハイフンの前の数字の昇順→ハイフンの後ろの数字の昇順で並べて値を取得する方法をご存知の方はいらっしゃいますか?
お分かりの方いらっしゃいましたら、宜しくおねがいします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Stackoverflowの記事によるとorderメソッドは引数に指定したSQLがorder byに飛ばされるようなので、MySQLをお使いであれば下記のような形で実現できるかと思います。データベースが違っても同じようにboxidを数値化すれば目的が達成できるのではないでしょうか。

boxidがいつも「2桁ハイフン1 or 2桁」であれば、とりあえず動いてくれると思います。

ruby

1@book = Book.all.order("CAST(REPLACE(boxid, "-", ".") AS DECIMAL(2,2))")

投稿2015/12/14 13:14

jinco

総合スコア432

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

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

nimbus1978

2015/12/14 16:09

まさに、この方法で解決しました。 回答ありがとうございました。
jinco

2015/12/14 19:50

よかったです。ただちょっと気になるのは、この方法だととりあえず動かすことは可能ですが、毎回ごちゃごちゃしたSQLを呼び出すので、あまり効率が良くないような気がします。このorderメソッドが呼び出される頻度ですとか、アプリの規模などにもよると思うのですが、bookのデータを保存するときにソート用の数値を保存しておく等したほうが良いかもしれません。そのあたり本職の方ならどうするのか気になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問