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

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

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

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

Ruby on Rails

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

Q&A

1回答

3752閲覧

【rails】あいうえお索引を作る際の、モデル設計とルーティング設計

Taka624

総合スコア40

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2016/07/24 10:42

編集2022/01/12 10:55

こちらのページのような、五十音順の索引を作りたいと考えています。

仕様は、上記のサイトのような設計で、簡単にまとめますと、
1.索引のページにまずは「ああ」~「あん」までのアーティストを表示する。
2.サイドバーに、一文字目・ふた文字目それぞれを指定する五十音の表をおく。
3.一文字目を選択する表から、「い」以降の文字を押された場合には、該当のページに飛ぶ(「え」をクリックされた場合、「えあ」から始まり「えん」で終わるものまで表示するページに飛ぶ)

railsで作るとしたら、
どのようなルーティングを作ればいいのでしょうか? また(ルーティングにも関わると思いますが)モデルを新たに作ったほうが良いのでしょうか?

artistsテーブルの、
nameカラムに名前があり、そこには漢字やアルファベット等様々な文字が入っています。
phoneticカラムにふりがながあり、そこにはnameカラムの読み方がすべて平仮名で入っている状態ですが、
設計を変えたほうがよさそうであればそちらもご指摘をお願いしたいです。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

リンク先を見ましたが、興味深いですね。
URLから推察するに、おそらく、
1文字目を保持するname_list,2文字目を保持するsecond_name_list(想像ですが)が存在して、
name_list has_many :second_name_list
has_many :artists, through: :second_name_list
という感じではないかと思います。

name_listコントローラでは、以下のような操作をしているかと思います。
・全name_listsを取得して左カラムの上部のリンクを生成
・idで渡された1文字目のモデルname_listの、2文字目のリストで左カラム下部のリンクを生成
・同じく指定されたname_listモデルの関連artistsを取得して右カラムのリストを生成
・左カラム下部(2文字目のリスト)では、javascrptで右カラムのスクロールを制御

name_listのIDがあ〜んまで整然と並んでいるので、最初にマスタとしてname_listとsecond_name_listを生成しておき、artistが追加されたときに、対象となるsecond_name_listに関連づけているのではないかと思います。

name_listコントローラでは、NameList.includes({second_name_list: :artist}).where(id: params[:id])みたいに一括で関連artistsまで取得し、
2文字目のリストのジャンプを作るときに、second_name_list.artist.empty?みたいな分岐でjavascriptリンクを有効にするかチェックする、等のような事をしているのではないかと。

右カラムは、second_name_listのループを回し、さらにartistsのループを回して表示、みたいな。

こういう検索系では、大抵はartistモデルに読み仮名カラムを作り、フルテキストインデックスを張るか、2文字目までの読み仮名のカラムを作ってインデックス化して、コントローラ側でごにゃごにゃするパターンが多いのですが、これはこれで色々効率的ですね。

投稿2016/07/29 20:21

rifuch

総合スコア1901

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問