如何将路由资源的成员放在其父命名空间之外?

时间:2014-10-06 19:21:10

标签: ruby-on-rails rails-routing

我想得到:

helper              | path             | action
--------------------|------------------|---------
file_path           | GET /file        | file#index
file_path(id)       | GET /file/:id    | file#show
show2_file_path(id) | GET /show2/:id   | file#show2  <-- This is hard.

其中:id在所有路线上都有相同的constraint: {id: /.+/}

解释:我想要第二种方式来显示名为show2的文件或目录。

问题的根源:我无法使用/file/:id/show2因为:id是文件路径并且可能包含斜杠。因此,如果文件名为show2,那将是不明确的。

我能找到的最好的是非常明确的:

resources :file, only: [:index, :show], constraints: { id: /./ }
get 'show2/:id' => 'file#show2', constraints: { id: /./ }, as: :show2_file

但我不满意,因为我在重复:

  • 第1行和第2行之间的约束和控制器名称file
  • 行动名show2在第2行重复3次

我希望我能把它写成像#&#34;浅成员&#34;:

resources :file, only: [:index, :show], constraints: { id: /./ } do
  member do
    get :show2, shallow: true
  end
end

将结合:

  • 成员特征:重用父控制器
  • 浅薄特征:不要在路径中使用父命名空间

相关问题:

0 个答案:

没有答案