在Rails4的路由资源中更改parent:parent_id参数的名称

Asn*_*tta 6 routes ruby-on-rails-4

我可以用这种方式更改路由中的:id参数的名称,但这可以更改嵌套资源的参数,就像我有

resources :companies, param: :company_id do
  resources :shares, only[:index]
end
Run Code Online (Sandbox Code Playgroud)

这会产生像这样的路线

/companies/:company_company_id/shares
Run Code Online (Sandbox Code Playgroud)

哪个错了我想要这样的路线

/companies/:company_id/shares
Run Code Online (Sandbox Code Playgroud)

我需要做什么?

Jar*_*arl 6

更干净的方法是使用member

resources :companies, param: :company_id do
  member do
    resources :shares, only[:index]
  end
end
Run Code Online (Sandbox Code Playgroud)


skp*_*rin 4

我以前经历过这个问题,并通过下面的方法来解决这个问题......虽然它很丑陋,但我还没有找到更好的方法。

改变:

resources :companies, param: :company_id do
  resources :shares, only: [:index]
end
Run Code Online (Sandbox Code Playgroud)

致:( 注意空白only: []

resources :companies, param: :company_id
resources :companies, only: [], param: :id do
  resources :shares, only: [:index]
end
Run Code Online (Sandbox Code Playgroud)

现在,当你运行时,rake routes你会看到正确的:

/companies/:company_id/shares(.:format)
Run Code Online (Sandbox Code Playgroud)

除了所有其他companies端点之外:

/companies(.:format)
/companies(.:format)
/companies/new(.:format)
/companies/:company_id/edit(.:format)
/companies/:company_id(.:format)
/companies/:company_id(.:format)
/companies/:company_id(.:format)
/companies/:company_id(.:format)
Run Code Online (Sandbox Code Playgroud)

全部保留相同的:company_id参数名称。