3

Rails Routing Redirectionガイドによると、一致したURLをroutesファイル内の別の名前付きURLにリダイレクトする簡単な方法はないようです。

リダイレクト関数で完全なURLパス()を指定せずに、routes.rbでこのようなリダイレクトまたは類似のリダイレクトができればいいのですが"/articles/%{id}"

match "articles/:id" => "articles#show", :as=>'article'
match "articles/view/:id", :to => redirect(article_path) 

この機能を提供する可能性のあるプラグインまたはgemはありますか?


私の最終的な解決策には、受け入れられた回答に基づいて次のような関数を追加することが含まれていました。

# handles redirecting a matched URL to a named URL
# source_match = string to match against
# dest_name = symbol of the named URL 
def redirect_to_url(source_match,dest_name)
    param_symbols = source_match.scan(/:([a-z\-\_]+)/i).flatten.map{|i| i.to_sym}
    match source_match, :to=>redirect{|params,request| 
        Rails.application.routes.url_helpers.send("#{dest_name}_path", params.slice(*param_symbols))
    }
end
4

1 に答える 1

9

これは達成可能です。これを遅延解決する必要があるため、リダイレクトのラムダ バージョンを介して Rails URL ヘルパー モジュールを直接参照する必要があります。

match "articles/view/:id", redirect {Rails.application.routes.url_helpers.article_path}

article_path を操作するには ID を渡す必要があるため、これは機能しない可能性があることに注意してください。この場合、リダイレクト ディレクティブのラムダ バージョンに渡される params を使用できます。

match "articles/view/:id", redirect {|params, request| Rails.application.routes.url_helpers.article_path(params[:id]) }
于 2012-10-31T14:58:37.317 に答える