Posted at

LP用の素敵な素敵なroutesを作る(いずれのPathでも、同じshowアクションで処理する)

More than 1 year has passed since last update.


やりたいこと

LP(ランディングページ)のような、LPディレクトリ内にいろんなファイル名でファイルを設置するんだけど、すべて処理は特になくてただHTMLをレンダリングしてあげたい。

/lp/hogehoge1.html

/lp/hogehoge2.html

/lp/hogehoge3.html

というアクセスをいずれも同じshowアクションでこなしたいなと。


何が困ったのか

LPを増やすば増やすほど、


lp_controller.rb

def hogehoge1; end

def hogehoge2; end
def hogehoge3; end


routes.rb

get 'hogehoge1', to: 'lp#hogehoge1'

get 'hogehoge2', to: 'lp#hogehoge2'
get 'hogehoge3', to: 'lp#hogehoge3'

とか書かないといけない。このように愚直に書けば実現できるけど、生産性低すぎ&面倒&忘れるわ、こんなん。

一発でできんかね?


方法


lp_controller.rb

def show

render params[:page]
end


routes.rb

get 'lp/:page', to: 'lp#show'



解説

:page という部分が重要で、これがhogehoge1だろうがhogehoge2だろうがの部分になります。

controllerでは、渡ってきたhogehoge1やhogehoge2を解釈してrenderしてくれるので、適したhogehogeを返してくれます。

これでviewがhogehoge100とかになってもcontrollerやroutesをいじる必要なし!


メリット


  • hogehoge100とか大量になっても手間が増えない

  • viewさえ増やせばいい という単純明快な作りになる


余談

アクションが変わる場合はこれ使えません。

paramsを受け取る形になるので、何かしらparamsを要因とする処理は走らせることができるのでただのHTMLよりは処理に幅が出せます。