質問: Book.all.sort_by{"boxid"} とすると、ちゃんとboxidが [2-1,3-4,10-1,11-1]の順でBookの値を取得できたのですが、 @bookが配列になってしまい、その後の処理に支障をきたしてしまいました。 @bookがActiveRecord_Relationクラスのまま、boxidが、ハイフンの前の数字の昇順→ハイフンの後ろの数字の昇順で並べて値を取得する方法をご存知の方はいらっしゃいますか? お分かりの方いらっしゃいましたら、宜しくおねがいします。
回答: Stackoverflowの記事によるとorderメソッドは引数に指定したSQLがorder byに飛ばされるようなので、MySQLをお使いであれば下記のような形で実現できるかと思います。データベースが違っても同じようにboxidを数値化すれば目的が達成できるのではないでしょうか。 boxidがいつも「2桁ハイフン1 or 2桁」であれば、とりあえず動いてくれると思います。 ``` @book = Book.all.order("CAST(REPLACE(boxid, "-", ".") AS DECIMAL(2,2))") ```