やりたいこと
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よりは処理に幅が出せます。