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

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

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

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

Q&A

解決済

1回答

1526閲覧

文字数の多い順にソートしたい

Gr.

総合スコア89

Ruby on Rails

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

0グッド

0クリップ

投稿2018/10/13 08:04

状況

例)

controller

1def index 2 @book = Book.all 3end

html

1<table> 2 <% @book.each do |f| %> 3 <tr> 4 <td><%= f.name %></td> 5 <td><%= f.name.length %>文字</td> 6 </tr> 7 <% end %> 8</table>

結果:

こころ3文字
吾輩は猫である7文字
坊っちゃん5文字

titleの長い順に表示したい

controller

1def index 2 @book = Book.order('name.length desc') 3end

こうだと思って書いたらダメでした。
どなたか正しい書き方を教えてください。

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

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

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

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

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

jun68ykt

2018/10/13 09:34

こんにちは。データベースは何をお使いですか?MySQLでしょうか?
guest

回答1

0

ベストアンサー

こんにちは。

質問への追記・修正の依頼からもお尋ねしたとおり、お使いのデータベースが何かを知りたいところですが、char_length をサポートしているデータベースであれば、以下の修正でよいと思います。

修正前:

ruby

1@book = Book.order('name.length desc')

修正後: (※下記のように変数名は、@books と、複数形にしたほうがよいでしょう。)

ruby

1@books = Book.order('char_length(name) desc')

例えば、MySQL 5.6 は char_length関数 をサポートしています。

以下はchar_length を使用するコード例です。

   

なお、データベースによっては、char_length の替わりに別の関数を使う必要があります。文字列の文字数を取得するために、char_lengthではない関数を使うデータベースについては、以下をご参照ください。

SQL中で文字列の文字数を取得する関数としてSQL92/99ではCHAR_LENGTH関数が定義されています.しかし,多くのDBMSは独自で同様の機能をもつ関数を用意しています.

(以上、逆引きSQL構文集: 文字列の文字数を取得する より引用)

以上、参考になれば幸いです。


追記

SQLの関数を使わずに、以下のように Ruby の sort を使って、name の長さの降順にソートすることもできます。

ruby

1@books = Book.all.sort {|a,b| b.name.length <=> a.name.length }

投稿2018/10/13 10:06

編集2018/10/13 11:42
jun68ykt

総合スコア9058

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

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

Gr.

2018/10/13 11:52

jun68yktさん 回答ありがとうございます! SQLite3だったので、貼り付けていただいたリンク先の記事をもとに.order('length(name) desc')と書いてみたところ成功しました!!! たいへん助かりました! ありがとうございました!!!
jun68ykt

2018/10/13 11:56

解決されたようですね、良かったです ????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問