Rails路由:带变量的命名空间

时间:2015-04-23 17:54:31

标签: ruby-on-rails url routes namespaces

我有一个名为api的名称空间的资源:

namespace :api, defaults: { format: :json } do
  resources :thing
end

(结果:/api/thing/:id

我想在url中为非资源id变量设置另一个变量:

/api/non_resource/:non_resource_id/thing/:id

如何将:non_resource_id变量(以及网址的相关non_resource/部分)添加到命名空间?

2 个答案:

答案 0 :(得分:2)

您可以使用scope

namespace :api, defaults: { format: :json } do

  scope '/non_resource/:non_resource_id' do
    resources :thing
    # other resources
  end

end

答案 1 :(得分:0)

事实证明,答案是在命名空间内的资源中添加自定义路径前缀,而不是命名空间本身:

namespace :api, defaults: { format: :json } do
  resources :thing, path: '/non_resource/:non_resource_id/things'
end

此前缀的资源的URL的所有出现的字符串(包括things在结束,因为这将覆盖默认值,其也只是/things),并允许访问{{1}变量通过:non_resource_id控制器中的params变量。