link_to メソッドのパスに文字列を用いた変数を使う場合
rubyのsendメソッドを使う。
send(name, *args)
name: 文字列かSymbol で指定するメソッド名
args: 呼び出すメソッドに渡す引数
例
前提
- catsオブジェクトのインスタンス@cat
- dogsオブジェクトのインスタンス@dog
があって、部分テンプレート(パーシャル)に渡した変数によって
link_toメソッドを動的に変更したい。
- @catが渡された場合は link_to @cat.name, cats_path(@cat)に
- @dogが渡された場合は link_to @dog.name, dogs_path(@dog)に
記述法
元のhtml.erbファイル
<%= render partial 'shared/profile', locals: { object: @cats } %> 又は <%= render partial 'shared/profile', locals: { object: @dogs } %>
部分テンプレート shared/_profile.html.erb内のlink_toメソッド
<%= link_to object.name, send("#{object.class.to_s.downcase}_path", object) %>
*object.class.to_s.downcase
object=@catの場合、object.class.to_s→"Cats"となるので
downcaseメソッドで"cats"と小文字にしている。
さらにパラメーターをもたせる場合は
<%= link_to object.name, send("#{object.class.to_s.downcase}_path", object, size: :s, color: :red) %>
と、objectの後に追記していく。