我想要这样的东西:
if has_route?(:controller => 'posts', :action => 'index')
...
我怎么能在视图中做到这一点?
- - 解决方案 - -
def has_route? options
Rails.application.routes.routes.map{|route| route.defaults}.include?(options)
end
我想要这样的东西:
if has_route?(:controller => 'posts', :action => 'index')
...
我怎么能在视图中做到这一点?
- - 解决方案 - -
def has_route? options
Rails.application.routes.routes.map{|route| route.defaults}.include?(options)
end
我知道这与您想要的相反,但是您可以执行以下操作:
Rails.application.routes.recognize_path('/posts')
这将返回一个像这样的哈希:
{:controller=>"posts", :action=>"index"}
但我不知道有一个 API 可以给它哈希并返回路径。
您可以查看ActionDispatch::Routing::RouteSet API。
另外,请注意,它Rails.application.routes.routes
返回一个 Journey::Routes 对象数组,因此您可以map
将此数组用于您想要的控制器/动作配对。但似乎这个 API 应该已经存在。如果没有,也许应该。:)
你可以尝试类似的东西respond_to?("[name of rails routing method]")
通常路由以这种方式测试
it "routes to #index" do
get("/projects").should route_to("projects#index")
end
资源的脚手架将生成用于测试路由的规范文件,例如你可以看这里