LoginSignup
0
0

More than 3 years have passed since last update.

指定したいURLから直接ルーティングを作成する方法+α

Posted at

こんばんは
アロハな男、やすのりです!

今日はポートフォリオ作成時にルーティングの記述方法について、悪戦苦闘してしまったので同じことで悩まれている方や、自分が忘れた時用の備忘録として書き留めておこうと思います。

長くなりましたので、先に結論だけ載せておきますね。

結論

検索用のボタンを押した際に移動するページのURLを、コントローラーの管理下にしたくない場合は、

config/routes.rb
Rails.application.routes.draw do

    get '/:name', to: 'コントローラー名#edit' 

end

で、大丈夫です!!

↓参考ページはこちら
Railsドキュメント ルーティング
【ルーティング設計】1つのアクションで複数のビューを切り替えて表示する方法

それじゃあ、下に詳しく書き連ねていきますね。

状況

トップページから『ホテル』と書かれたボタンを押すとホテルカテゴリーの検索ページへ遷移する機能を作成したかったんですが、URLをlocalhost:3000/hotelという形にしたかったので、まずはコントローラーをそれぞれ別に作成してルーティングに記述してみました。

config/routes.rb
Rails.application.routes.draw do

    resources :hotels, only [:index]

end

そうすると、
hotels GET /hotels(.:format) hotels#index
というルーティングが作成されました。

これだとURLは希望に近い形で実現はできましたが、項目が多くなればなるほど別途コントローラーを作成しないといけません。

と、いうことは呼び出されるコントローラーを変更すればいいんだ!と思い

config/routes.rb
Rails.application.routes.draw do

    resources :hotels, only [:index], controller: 'experiences'

end

こうすれば、アクセスした時にexperiencesコントローラーのindexアクションが呼び出される様になるので、viewファイルはテンプレートファイル等を利用することで表示することができると思いますが、この場合は何も記述のないhotelsコントローラーが出来上がってしまいます。
今回は1つで記述していますが、どんどん項目が増えればその分ルーティングの記述も多くなってファイルも増えていってしまいます。

どうしたものか...と思っていろいろ調べていると見つけました!!
まずは、URLを指定のものにしたいなら

config/routes.rb
Rails.application.routes.draw do

    get '/hotel', to: 'experiences#index'

end

と記載するだけで大丈夫でした!!

これは、Railsドキュメントのルーティングページに記載がされていました。

しっかりドキュメントを確認することの大切さを改めて実感しました...

さて、これだけでも当初の目標である『URLをlocalhost:3000/hotelにする』というのは完了していますが、今のままだとページが/hotelだけじゃなく他の項目も増えた時にどんどん記述が増えていってしまいますね。
せっかくなので、こちらも改善しちゃいましょう!!

改善後

experiencesコントローラーeditアクションというものを新たに定義してそこに全てのルーティングがいく様にまとめることができるんです!!

controllers/experiences_controller.rb
class ExperiencesController < ApplicationController

  def edit
    render "/#{params[:name]}"
  end

end

config/routes.rb
Rails.application.routes.draw do

    get '/:name', to: 'experiences#edit'

end

また、URLの/:nameという部分では、リクエストの送信時にparams内のキーに:nameを設定して部分テンプレートのファイル名をバリューとして渡すことで、editアクション内のrenderメソッドで該当するビューファイルを表示させています。

今回の経験を経て

公式ドキュメントを読むことの大切さや、先人の方が残して下さった文献のありがたみが身に染みます...

これからも何か問題があれば、どんどん調べていきたいと思います!!
(他力本願な感じもするけど大丈夫かな...)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0