spy*_*yle 3 redirect routes ruby-on-rails-3
根据Rails路由重定向指南,似乎没有一种简单的方法可以将匹配的URL重定向到路由文件中的另一个命名URL.
我希望我可以在我的routes.rb中像这样或类似的东西重定向,而无需"/articles/%{id}"
在重定向函数中指定完整的url path().
match "articles/:id" => "articles#show", :as=>'article'
match "articles/view/:id", :to => redirect(article_path)
Run Code Online (Sandbox Code Playgroud)
是否有可能提供此功能的插件或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
Run Code Online (Sandbox Code Playgroud)
这是可以实现的,你只需要通过lambda版本的重定向直接引用Rails URL helpers模块,因为你需要这个懒得解决:
match "articles/view/:id", redirect {Rails.application.routes.url_helpers.article_path}
Run Code Online (Sandbox Code Playgroud)
请注意,这可能不起作用,因为article_path需要传递id才能运行.如果是这种情况,您可以使用传递给redirect指令的lambda版本的params:
match "articles/view/:id", redirect {|params, request| Rails.application.routes.url_helpers.article_path(params[:id]) }
Run Code Online (Sandbox Code Playgroud)