url_for()が便利だった!

こんにちは!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()が便利だった話でした。