ポートフォリオ制作中に、初歩的な部分だと思うのですが詰まってしまった部分があったのでメモに残そうと思います。
初学者なため、間違っているところがあれば教えていただけると幸いです。
前提
Rails: 7.0.6
Ruby: 3.2.2
-
編集リンクと削除リンクのアイコンをまとめた部分テンプレートを作っている。
-
カテゴリー一覧とアイテム一覧で同じ部分テンプレートをrenderしたい。
-
ページによってパスを動的に変えたい。
結論:polymorphic_pathを使う
削除ボタンに関しては、renderの時にlocalsで指定して変数を渡せばいいかなとイメージがついたのですが、編集ボタンがなかなかわかりませんでした。
色々調べた結果、
動的にリンク先を変えたい場合は、該当のパスの部分にpolymorphic_path
を使用すれば良いことがわかりました。
引数にモデルのインスタンスなどを渡すと、該当するurlを生成してくれるメソッドです。
<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>
<tr>
...
<td>
<%= render 'shared/crud_icon', object: @item %>
</td>
...
</tr>
<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