3

我想要这样的东西:

if has_route?(:controller => 'posts', :action => 'index')
  ...

我怎么能在视图中做到这一点?

- - 解决方案 - -

def has_route? options
  Rails.application.routes.routes.map{|route| route.defaults}.include?(options)
end
4

3 回答 3

1

我知道这与您想要的相反,但是您可以执行以下操作:

Rails.application.routes.recognize_path('/posts')

这将返回一个像这样的哈希:

{:controller=>"posts", :action=>"index"}

但我不知道有一个 API 可以给它哈希并返回路径。

您可以查看ActionDispatch::Routing::RouteSet API。

另外,请注意,它Rails.application.routes.routes返回一个 Journey::Routes 对象数组,因此您可以map将此数组用于您想要的控制器/动作配对。但似乎这个 API 应该已经存在。如果没有,也许应该。:)

于 2012-11-30T18:18:52.783 回答
0

你可以尝试类似的东西respond_to?("[name of rails routing method]")

于 2012-11-30T17:51:15.993 回答
0

通常路由以这种方式测试

it "routes to #index" do
  get("/projects").should route_to("projects#index")
end

资源的脚手架将生成用于测试路由的规范文件,例如你可以看这里

于 2012-11-30T18:03:26.077 回答