Rails3で有効なパスの場合だけリンクを表示する

Railsのビューでリンクを作成する場合多くの場合でlink_toを使う.
link_toはリンクを作成するが,リンク先がちゃんとあるかどうかは確認されないため,リンク先のルーティングが設定されていないと"No route matches"エラーとなる.

というわけで.urlがルーティング上有効な場合のみリンクを表示するlink_to_only_valid_pathヘルパーを作成した.

app/helpers/application_helper.rbにlink_to_only_valid_pathヘルパ−を追加

module ApplicationHelper
  def link_to_only_valid_path(*args)
      application_name = Rails.application.class.parent_name
      all_routes = eval(application_name)::Application.routes.routes
      return link_to_if(
        all_routes.map{ |r| r.path.match(args.second).present? }.include?(true), *args
      )
  end
end

引数はlink_toと全く同じで,使い方も同じです.
一応やってることはこんな感じ.

  1. ルーティング一覧を取得
  2. 取得したルーティング一覧の中でurlがマッチしたものがあるかを調べる
  3. 1つでもマッチしていればリンク先があり,1つもマッチしなければリンク先がないのでそれぞれをtrue, falseとしてlink_to_ifの条件とする.

これにhttp://またはhttps://で始まる文字列をリンクとするようにしたけど,ここでは本筋ではないので割愛.
ソースコードは以下にあります.
github:gist wishid