こんにちは!HaraShoです。
今回は Railsの url_for()
が個人的に便利だった話について書きます。
url_for | Railsドキュメント
どう便利だったかというと、任意のメソッドを共通でもつControllerが複数ある場合、Controllerを意識せずにURLを生成できる点が便利でした。
具体例を出します。
Re:lationには従量課金のサービスが4つあります。 従量課金の請求額を算出する際、実績値をimportします。
実績値のデータ構造は個々の従量課金によって異なりますが、「実績値をimportする」Actionは共通です。
共通処理を集約するにあたり、Controllerでは基底クラスを用意したりmoduleを作成することで、重複するコードを削減できます。
一方、viewはpartialを用意するのですが、formに指定するURLが異なるため実装初期は以下のようにしていました。
_import_modal.html.erb
<% url = case @type when :aa import_aa_path when :bb import_bb_path %> <form url="<%= url>"></form>
partial内で @type
に応じてurlを切り替えていましたが、action毎に同じような判定を行うのが煩わしいと感じていました。
これを解決してくれたのが、url_for()
でした。
url_forのオプションにはアクション名を指定することができるので、controllerを意識せずurlの指定ができました。
<%= form_with url: url_for(action: :import) do |form| %> ...
ControllerやViewの共通化により、重複したコードを減らすことができました。
機能追加したにも関わらず、トータルのコード量が削減されたのをみると嬉しい気分になりますね。
以上、今回はurl_for()
が便利だった話でした。