如何在视图中检查rails route presence

时间:2012-11-30 17:47:22

标签: ruby-on-rails-3

我想要这样的事情:

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

我如何在视图中执行此操作?

----解决方案----

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

3 个答案:

答案 0 :(得分:1)

我知道这与你想要的相反,但你可以这样做:

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

哪个会返回这样的哈希:

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

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

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

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

答案 1 :(得分:0)

您可以尝试respond_to?("[name of rails routing method]")

之类的内容

答案 2 :(得分:0)

通常路线以这种方式测试

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

资源的脚手架将生成用于测试路径的spec文件,例如,您可以查看here