前提
インスタンス変数を引数にして、link_toでリンクを生成する際、指定した覚えのないリンクが生成されました。
生成されたのはそのページのリンクで、どうやら引数にnilを渡していると発生するようだ。
関連するページを発見できなかったので、検証結果と解決策を記載してみる。
なお、当方は初学者なので、見当違いであればコメントをいただけると幸いです。
環境
ruby 2.6.5
Ruby On Rails 6.0.0
TL;DR
http://localhost:3000/hoge/3というページ内で以下の記載をした場合
以下のように、そのページのリンクが生成される。(誰が使うねん)
<%= link_to nil,nil %>
=> <a href="/hoge/3">/hoge/3</a>
渡ってくるデータにnilが入る可能性がある場合は、以下のようにすると、nilの場合はブランクとなる。
@hoge・・・urlデータかnil
<%= link_to_if @hoge, @hoge, @hoge %>
空文字やスペースを入る可能性があるなら(そのへんはバリデーション対応するべき?)
<%= link_to_unless @hoge.blank?, @hoge, @hoge %>
詳細(検証と解消方法)
link_to(使い方)
link_to(リンクテキスト, パス [, オプション, HTML属性 or イベント属性])
リンクテキストがnilの場合は、パスに入れた内容がリンクテキストとして表出する
<%= link_to nil, "https://twitter.com/" %>
=> <a href="https://twitter.com/">https://twitter.com/</a>
パスがnilだった場合(http://localhost:3000/hoge/というページに記載)
カレントページのリンクが生成される
<%= link_to "hoge", nil %>
=> <a href="/hoge/">hoge</a>
なのでリンクテキストにもnil,パスにもnilが入っていると、
パスがnilなのでカレントページのリンクが生成される
→リンクテキストがnilなのでカレントページのリンクが表出されると思われる。
解消方法
使い方
link_to_if(条件式, リンクテキスト, url [, オプション, HTML属性 or イベント属性])
@hoge・・・urlデータかnil
<%= link_to_if @hoge, @hoge, @hoge %>
↑のようにすれば、@hogeがnilの場合は何も生成されず、データばあるときのみ生成される。
参考文献
https://railsdoc.com/page/link_to
https://railsdoc.com/page/link_to_if
nilを入れたときの動きが↓に書いてある。(link_toは結局url_forを呼ぶので)
https://github.com/rails/rails/blob/f33d52c95217212cbacc8d5e44b5a8e3cdc6f5b3/actionview/lib/action_view/routing_url_for.rb#L79