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

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

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

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

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

228閲覧

Ruby on railsで効率的にコードを書く方法について

widget11

総合スコア221

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/06/05 17:37

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...と中に貼り付け、オプションだけ変えるという作業を行う形となり非常に歯がゆく辛いです。

如何せんプログラミング初心者な為効率的なコードをかけず日々苦悶しております。
何か少しでも効率化できる方法がございましたらご教授ください。
また回答が長くなりそうでしたら、ヒントとなる言葉やサイトをお教えいただけましたら、検索して調べる所存です。
宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずは「レールに乗る」、つまり、Railsの標準に則ったような作り方をしてみましょう。

  • コントローラー名はShopsControllerのように、複数形+Controllerにする
  • ルーティングはresourcesを使って、標準的なものを自動生成する

標準的なコントローラー+ルーティングを使った場合、params[:id]のような形でIDを取れるようになるので、1つ1つアクションを立てる必要もなくなります。

Rails のルーティング - Rails Guide

投稿2018/06/05 23:18

maisumakun

総合スコア145121

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

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

maisumakun

2018/06/05 23:20

「守破離」という言葉がありますが、標準的なやり方は「それが便利だから」標準になっているものです。まずはそれを使って、メリット・デメリットを確認してから自分独自のアレンジを加えていく、という方がいいでしょう。
widget11

2018/06/06 11:14

ご回答ありがとうございます! もしよろしければですが具体的にどのようにindexアクションに書き込みコントローラーのメソッドに紐付ければよいのでしょうか? 自分なりに調べてみたのですが、CRUDに纏わる情報は多いのですがindex(表示)アクションを多数紐付ける方法に関しては見つけられませんでした。 回答者様が載せてくださったページの get '/patients/:id', 等はヒントになりそうだと思ったのですが、、、お手数おかけしますがよろしくお願い致します。
maisumakun

2018/06/06 11:18

案件を1つずつ出すアクションは、indexではなくshowアクションです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問