I want to know if an arbitrary path can be mapped to a route
recognized_request_for accomplishes what I want, but I can't get it to work in my controller.
Specifically, how can I execute recognized_request_for or something that accomplishes the same task from my controller?
For Rails 3 the call is
Rails.application.routes.recognize_path
Instead of
ActionController::Routing::Routes.recognize_path
Example:
def path_exists?(path)
Rails.application.routes.recognize_path(path)
true
rescue ActionController::RoutingError
false
end
SOLUTION:
@related_page_path = '/' + @page.path
begin
ActionController::Routing::Routes.recognize_path(@related_page_path, :method => :get)
rescue
@related_page_path = nil
end
If you want to connect an arbitrary path the a controller and and action, you can use map.connect
map.connect '/any/random/string/of/stuff', :controller => 'items', :action => 'new'
You can even call out embedded param designations in the path:
map.connect '/seeking/room/for/[:number_of_nights]/nights', :controller => 'rooms', :action => 'index'
with the above you will receive the value represented in the url as part of the params
hash in the controller.
您可能会动态生成路由助手方法并查看它是否存在(使用 respond_to? 甚至只是捕获任何抛出的异常)。
I recently came across an issue where I had to check if a path existed given an array of possible paths. I had tried the above suggestion Rails.application.routes.recognize_path
, but it's depericated as of rails 4.2.1
. I used the following instead:
Rails.application.routes.named_routes.routes.any?{ |key, value| key.to_s === "new_article" }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.