在Rails 3路由中重命名路径助手

时间:2010-11-19 00:49:32

标签: ruby-on-rails ruby ruby-on-rails-3 routing

我有一个项目控制器/模型。我没有在#index页面上列出项目,而是显示了一个下拉列表,它提交给项目#select,它找到了正确的项目(我确保每个选项组合只能有1个)并转发用户到该项目的#show页面。

所以对于我的路线,我这样做......

resources :projects, :only => [:index, :show] do
  collection do
    get 'select'
  end
end

那很好,但#select的帮助方法是'select_projects',这是可以理解的,但在我的情况下我真的想要'select_project'。而且我真的不想在另一个文件中将其别名。没问题我可以使用:as ...

resources :projects, :only => [:index, :show] do
  collection do
    get 'select', :as => 'select_project'
  end
end

但现在我的助手是'select_project_projects'。所以我作弊一点(仍然比另一个档案中的别名更好)......

resources :projects, :only => [:index, :show]
match '/projects/select', :to => 'projects#select', :as => 'select_project'

这看起来可能有用,但它并不是因为/ project / select实际匹配'project#show'的路由。改变线的顺序就可以了。

match '/projects/select', :to => 'projects#select', :as => 'select_project'
resources :projects, :only => [:index, :show]

但是有更优雅的方式处理这个吗?我意识到这是边界OCD,但我希望能够完全控制资源块中的路径名称。

3 个答案:

答案 0 :(得分:2)

使用资源而不是资源

答案 1 :(得分:1)

您可能不希望将其作为收集路线而是成员路线:

resources :projects, :only => [:index, :show] do
  member do
    get 'select'
  end
end

这样你就可以得到select_project助手。

答案 2 :(得分:0)

对于那些想要重命名辅助方法方面的人(如标题所示):

resources :posts, as: "articles"
相关问题