カテゴリー:
Rails
タグ:
 Rails link_to_if

このエントリーをはてなブックマークに追加
更新日時:
2014年04月22日(火)
作成日時:
2014年04月22日(火)

前の記事 / 次の記事

Railsではlink_to_ifを使って

=link_to_if @flag, "記事を表示", article_path(@article)

と書ける。@flagがtrueならリンクが作成され、
falseならリンクは作成されずに文字列だけが出力される。

@flagがtrueの時

#=> articles/1

@flagがfalseの時

#=> 記事を表示

で、この時、リンクを作成するかどうかの判定対象がパスに含まれると微妙になる。
次のようにして記事があればリンクを作成し、なければ作成しないっていう使い方を
したい場合が多いと思うんだけど、

=link_to_if @article, "記事を表示", article_path(@article)

リンクを作成するか否かの判定に関わらず、
内部的には article_path(@article) が評価されるので、
@articleがあればリンクが作成されるけど、なければエラーになる。

@articleがある時

#=> articles/1

@articleがない時

#=> idがねーって言われる

という仕様なので、パスに含まれる値をリンク作成の判定に使いたい場合は
素直に

- if @article
  =link_to "記事を表示", article_path(@article)
- else
  記事を表示

と書くしかなさそう。