0
0

polymorphic_path:部分テンプレートでリンク先を動的に変更する方法

Posted at

ポートフォリオ制作中に、初歩的な部分だと思うのですが詰まってしまった部分があったのでメモに残そうと思います。
初学者なため、間違っているところがあれば教えていただけると幸いです。

前提

Rails: 7.0.6
Ruby: 3.2.2

  • 編集リンクと削除リンクのアイコンをまとめた部分テンプレートを作っている。

  • カテゴリー一覧とアイテム一覧で同じ部分テンプレートをrenderしたい。

  • ページによってパスを動的に変えたい。

結論:polymorphic_pathを使う

削除ボタンに関しては、renderの時にlocalsで指定して変数を渡せばいいかなとイメージがついたのですが、編集ボタンがなかなかわかりませんでした。

色々調べた結果、

動的にリンク先を変えたい場合は、該当のパスの部分にpolymorphic_pathを使用すれば良いことがわかりました。

引数にモデルのインスタンスなどを渡すと、該当するurlを生成してくれるメソッドです。

shared/_crud_icon.html.erb
<ul>
  <li class="inline-block">
    <%= link_to edit_polymorphic_path(object) do %> #=> "items/1/edit"
      アイコン
    <% end %>
  </li>
  <li class="inline-block">
    <%= button_to object, method: :delete do %>
      アイコン
    <% end %>
  </li>
</ul>
items/_item.html.erb
<tr>
...
  <td>
    <%= render 'shared/crud_icon', object: @item %>
  </td>
...
</tr>
categories/_category.html.erb
<tr>
...
  <td>
    <%= render 'shared/crud_icon', object: @category %>
  </td>
...
</tr>

まとめ

便利なメソッドがあることを知れてよかったです。

参考文献

https://apidock.com/rails/ActionController/PolymorphicRoutes/polymorphic_url
https://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html
https://railsdoc.com/page/polymorphic_url

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