質問: RubyOnRailsのController上でAPIを叩き、返ってきたJSONデータから必要なデータを取り出しメンバ変数に入れてview側で表示をするというアプリケーションみたいなものを作っております。 しかし困っている問題がございます。 端的に言いますと、取りたい値が多く、基本的にエンドポイントは同じなのですがその値の分オプション(id)の数が多い為、ルーティング、コントローラー、ビュー全部ひっくるめて非常にファットな状態になってしまうということです。 例えばですがとあるチェーン店の店舗ごとの従業員のリストが返ってくるAPIがあるとします。 http://example/v1/shop/playersというAPIのリクエストURLがあるとしたら http://example/v1/shop/players/1 #横浜市店 http://example/v1/shop/players/2 #青森市店 http://example/v1/shop/players/3 #博多市店 といった具合に基本的にエンドポイントは同じで指定するプロパティ値(店舗ID)によって返ってくる、支店の従業員リストが異なるとします。 具体的に書くと、この店舗毎にデータを1つ1つ表示したい場合、現在の僕は以下のような処理を行うしか方法を知りません。 ``` #ルート Rails.application.routes.draw do get 'abc/index' => 'abc#index' get 'abc/index2'=> 'abc#index2' get 'abc/index3' => 'abc#index3' end ``` ``` #コントローラー class AbcController < ApplicationController def index #APIを叩き、横浜市の従業員リストを取ってくる end def index2 #APIを叩き、青森市の従業員リストを取ってくる end def index3 #APIを叩き、青森市の従業員リストを取ってくる end end ``` ``` #index.html.erbファイル(横浜の店員を表示) ``` ``` #index2.html.erbファイル(青森の店員を表示) ``` ``` #index3.heml.erbファイル(博多に店員を表示) ``` 例えば上のように3つのAPI/プロパティ(横浜、青森、博多のリスト)を呼ぶだけならこれでいいかもしれないのですが、これを200店舗分呼びたいとなると、、、 index,index2,index3,index4,index5...index200とルート、アクション、viewと書く量が非常に多くなってしまいます(力技で行こうと思えばいけますが。。。) このような場合もう少し効率的にスッキリ書ける方法は何かないのでしょうか? ルートはまだいいのですが、APIを叩いているコントローラー側が、数100のデータを呼ぶとなると非常に長々しいコードとなり、viewも仕方がないかもしれませんがhtml.erbファイルを逐次作成しコードを、貼り付けする作業と化していまいます。 APIをリクエストする際のオプションが違うだけで、その他コードは全て同じものなのでひたすらindexメソッドの中身をひたすらコピペしindex2、index3...と中に貼り付け、オプションだけ変えるという作業を行う形となり非常に歯がゆく辛いです。 如何せんプログラミング初心者な為効率的なコードをかけず日々苦悶しております。 何か少しでも効率化できる方法がございましたらご教授ください。 また回答が長くなりそうでしたら、ヒントとなる言葉やサイトをお教えいただけましたら、検索して調べる所存です。 宜しくお願い致します。
回答: まずは「レールに乗る」、つまり、Railsの標準に則ったような作り方をしてみましょう。 * コントローラー名は`ShopsController`のように、**複数形**+`Controller`にする * ルーティングは`resources`を使って、標準的なものを自動生成する 標準的なコントローラー+ルーティングを使った場合、`params[:id]`のような形でIDを取れるようになるので、1つ1つアクションを立てる必要もなくなります。 Rails のルーティング - Rails Guide