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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

3回答

805閲覧

Rails ルーティングとアクションの効率的な書きかた

mbaby__8

総合スコア66

Ruby

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

Ruby on Rails 6

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

1グッド

2クリップ

投稿2020/10/14 06:44

以下のようなルーティングとコントローラーの書き方をしている場合、

より少ない行数で書く方法などはないでしょうか?

教えて頂けると幸いです。

route

1get "policy1" => "top#policy1" 2get "policy2" => "top#policy2" 3get "policy3" => "top#policy3" 4get "policy4" => "top#policy4" 5get "policy5" => "top#policy5" 6 . 7 . 8 . 9 . 10get "policy20" => "top#policy20"

conroller

1 def policy1 2 end 3 def policy2 4 end 5 def policy3 6 end 7 def policy4 8 end 9 def policy5 10 end 11 . 12 . 13 . 14 . 15 def policy20 16 end
beskey3👍を押しています

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

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

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

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

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

m.ts10806

2020/10/14 07:11

メソッドは全て別でないといけませんか?
mbaby__8

2020/10/14 07:50

メソッドの中には何も書かないので、1つでも表示できるのなら大丈夫だと思います。 policy1.html.erb~policy20.html.erbを表示するために書いている感じです。
gouf

2020/10/14 12:46

フォーマットは html.erb を採用していますが、実際は静的ページだったりしますか? (ERB 不要ですか?)
guest

回答3

0

あまり深く考えずに、Ruby のコードを書いてみてもいいかもしれません

config/routes.rb:

ruby

1Rails.application.routes.draw do 2 (1..20).each do |i| 3 get "policy#{i}" => "top#policy#{i}" 4 end 5end

app/controllers/top_controller.rb:

ruby

1class TopController < ApplicationController 2 (1..20).each do |i| 3 define_method("policy#{i}") {} # NOTE: メソッド定義のみで何もしない 4 end 5end 6

なにか参考になれば幸いです

投稿2020/10/14 12:41

gouf

総合スコア2321

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

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

0

メソッドの中には何も書かないので、1つでも表示できるのなら大丈夫だと思います。
policy1.html.erb~policy20.html.erbを表示するために書いている感じです。

下記の2つのどちらかで実現できそうな気がしますがいかがでしょうか?

1.Publicに置く
参考:https://www.javadrive.jp/rails/ini/index8.html

2. high_voltage gemを利用する(←使ったことはないですが・・・)
参考:https://machida.github.io/articles/20160718-rails-high-voltage/

投稿2020/10/14 11:35

no1knows

総合スコア3365

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

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

mbaby__8

2020/10/15 04:50

high_voltage初めて見ました。 静的なページたくさん作らないとならないので使えそうです。 ありがとうございます!
guest

0

ベストアンサー

手元にあったのがチュートリアル用に立てたRails5.1なので適用できるか分かりませんが、下記のように試してみました。

routes.rb

Ruby

1get 'policy:cd'=>"top#policy"

top_controller.rb

ruby

1 def policy 2 render "policy".concat(params[:cd]) 3 end

これでブラウザから
/policy1とアクセスするとtop/policy1.html.erbが実行され
/policy2とアクセスするとtop/policy2.html.erbが実行されるようになりました。

私自身もRailsについては最近始めたばかりで、あくまで「policy/:cdができるならpolicy:cdでもいけるんじゃないか」という、これまで別の言語でWebアプリケーションを開発してきた経験からの仮説で試してみました。

これがいけるとなると、結構動的なURL,Viewを実行させられそうですね。
※動的すぎると全体像が見えなくなるので程ほどに・・・

投稿2020/10/14 12:02

編集2020/10/14 12:34
m.ts10806

総合スコア80875

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

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

no1knows

2020/10/14 12:06

このやり方は初めてみました!(独学での経験しかないですが・・・) ちなみに:cdは何の略語で、どういった意味があるのでしょうか?
no1knows

2020/10/14 12:14

なるほど!勉強になります。いつもありがとうございます!
no1knows

2020/10/14 12:26

すいません。1つ確認です。 このやり方の場合、renderファイルがないときは、Template is missingとかのエラーになってしまうのでしょうか?
m.ts10806

2020/10/14 12:29

あくまで「できそう」で試した結果うまいことRailsが合致してくれただけだと思ってます。 実質Ruby触り始めて1か月程度なので、きっともっと良いやり方があるはずで。。。。 >このやり方の場合、renderファイルがないときは、Template is missingとかのエラーになってしまうのでしょうか? 手元に2まで作っていたので試しに /policy3 でアクセスしたらおっしゃる通りTemplate is missingになりました。 エラーページに飛ばすように、エラーハンドリングも必要そうですね。
no1knows

2020/10/14 12:32

あぁ、いいやり方だと思ったのですが・・・そうなっちゃうんですね。 検証いただきありがとうございます!
m.ts10806

2020/10/14 12:36

> あぁ、いいやり方だと思ったのですが・・・そうなっちゃうんですね。 renderで直接テンプレート指定しているので仕方ない部分はあります。 ただ、エラーハンドリングなしのままでアプリケーション作ることはないと思うし、 「既知ではないルーティング」としてコントローラ側で処理させるのはある話だと思います。 低評価理由が気になりますが最近コメントつかない不純のなものばかりなので、無視しときます。
no1knows

2020/10/14 12:39

実装方法の1つなので、低評価はおかしいですね。。。
mbaby__8

2020/10/15 04:49

出来ました! 自分+で結合してエラーになっていたんですが、concatならエラーにならないんですね。 ありがとうございます。
m.ts10806

2020/10/15 04:54

文字列結合の仕方は1つではないので、単に何かしら間違えてたのではないかと。 たまたま調べてすぐ使えそうだったのがconcatなので採用しただけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問