集合中的路线匹配

时间:2012-01-16 01:14:18

标签: ruby-on-rails-3 collections routes match

我以这种方式在我的控制器中定义每个动作(在routes.rb中):

  resources :home do
    collection do
      get "home/index"
      get "home/about_me"
      get "home/contact"
    end
  end

如果我使用匹配动作 about_me ,我必须使用

      resources :home do
        collection do
          get "home/index"
          get "home/about_me"
          get "home/contact"
        end
      end

      match 'about-me' => 'home#about_me'

是否存在,如何将match规则直接添加到集合中?我的意思是这样的:

  resources :home do
    collection do
      get "home/index"
      get "home/about_me", match => "about-me"
      get "home/contact"
    end
  end

我还有一个问题 - 当我在routes.rb第二个代码块中使用时,所以当我设置URL地址about-me时,地址工作正常,但是当我在那里输入时home/about_me,所以我收到了错误

  

未知操作:无法找到HomeController 的操作'show'。

导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:3)

我认为这里的问题是,当您的路由嵌套在home/内时,它们的前缀为resources :home。试试这个:

 resources :home do
   collection do
     get :index
     get :about_me
     get :contact
   end
 end

此外,如果您在设置路线时遇到问题,请在控制台中输入rake routes。这将生成您的应用程序的路由以及相应的路径和控制器。

编辑:这是你的另一个问题的答案。

resources :home do
  collection do
    get 'about_me' => 'about-me'
  end
end