0

In Rails 4.2.6, I am creating nested resources like this

routes.rb:

resources :analysis, param: :project_id do 
  resources :configuration 
end

resources :decision, param: :project_id do
  resources :configuration
end

It works fine when I am in the analysis or decision controller. However, when I am in the configuration controller, I receive the param :analysis_project_id or :decision_project_id. How can I change this so I still receive :project_id?

I don't want to customize my configuration controller to be aware that it is nested in different resources.

1 Answer 1

1

just this, you need not to send params over here, It will take automatically with corresponding to your action.

  resources :analysis do 
       resources :configuration  
  end

if you need routes like these

 analysis_configuration_index GET       /analysis/:analysis_id/configuration(.:format)          configuration#index
                              POST      /analysis/:analysis_id/configuration(.:format)          configuration#create
 new_analysis_configuration GET       /analysis/:analysis_id/configuration/new(.:format)      configuration#new
 edit_analysis_configuration GET       /analysis/:analysis_id/configuration/:id/edit(.:format) configuration#edit
 analysis_configuration GET       /analysis/:analysis_id/configuration/:id(.:format)      configuration#show
                         PATCH     /analysis/:analysis_id/configuration/:id(.:format)      configuration#update
                         PUT       /analysis/:analysis_id/configuration/:id(.:format)      configuration#update
                         DELETE    /analysis/:analysis_id/configuration/:id(.:format)      configuration#destroy
          analysis_index GET       /analysis(.:format)                                     analysis#index
                         POST      /analysis(.:format)                                     analysis#create
            new_analysis GET       /analysis/new(.:format)                                 analysis#new
           edit_analysis GET       /analysis/:id/edit(.:format)                            analysis#edit
                analysis GET       /analysis/:id(.:format)                                 analysis#show
                         PATCH     /analysis/:id(.:format)                                 analysis#update
                         PUT       /analysis/:id(.:format)                                 analysis#update
                         DELETE    /analysis/:id(.:format)                                 analysis#destroy

EDITED 13 Aug 2020

To get the specific param in nested resources

resources :analysis, param: :project_id do
   member do
        resources :configurations
   end
end
resources :decision, param: :project_id do
  member do
     resources :configurations
  end
end

Expected routes

    configurations GET      /analysis/:project_id/configurations(.:format)                                     configurations#index
              POST     /analysis/:project_id/configurations(.:format)                                     configurations#create
new_configuration GET      /analysis/:project_id/configurations/new(.:format)                                 configurations#new
edit_configuration GET      /analysis/:project_id/configurations/:id/edit(.:format)                            configurations#edit
    configuration GET      /analysis/:project_id/configurations/:id(.:format)                                 configurations#show
                  PATCH    /analysis/:project_id/configurations/:id(.:format)                                 configurations#update
                  PUT      /analysis/:project_id/configurations/:id(.:format)                                 configurations#update
                  DELETE   /analysis/:project_id/configurations/:id(.:format)                                 configurations#destroy
   analysis_index GET      /analysis(.:format)                                                                analysis#index
                  POST     /analysis(.:format)                                                                analysis#create
     new_analysis GET      /analysis/new(.:format)                                                            analysis#new
    edit_analysis GET      /analysis/:project_id/edit(.:format)                                               analysis#edit
         analysis GET      /analysis/:project_id(.:format)                                                    analysis#show
                  PATCH    /analysis/:project_id(.:format)                                                    analysis#update
                  PUT      /analysis/:project_id(.:format)                                                    analysis#update
                  DELETE   /analysis/:project_id(.:format)                                                    analysis#destroy
                  GET      /decisions/:project_id/configurations(.:format)                                    configurations#index
                  POST     /decisions/:project_id/configurations(.:format)                                    configurations#create
                  GET      /decisions/:project_id/configurations/new(.:format)                                configurations#new
                  GET      /decisions/:project_id/configurations/:id/edit(.:format)                           configurations#edit
                  GET      /decisions/:project_id/configurations/:id(.:format)                                configurations#show
                  PATCH    /decisions/:project_id/configurations/:id(.:format)                                configurations#update
                  PUT      /decisions/:project_id/configurations/:id(.:format)                                configurations#update
                  DELETE   /decisions/:project_id/configurations/:id(.:format)                                configurations#destroy
        decisions GET      /decisions(.:format)                                                               decisions#index
                  POST     /decisions(.:format)                                                               decisions#create
     new_decision GET      /decisions/new(.:format)                                                           decisions#new
    edit_decision GET      /decisions/:project_id/edit(.:format)                                              decisions#edit
         decision GET      /decisions/:project_id(.:format)                                                   decisions#show
                  PATCH    /decisions/:project_id(.:format)                                                   decisions#update
                  PUT      /decisions/:project_id(.:format)                                                   decisions#update
                  DELETE   /decisions/:project_id(.:format)                                                   decisions#destroy
Sign up to request clarification or add additional context in comments.

3 Comments

With this, I have the parameter :id in the analysis controller, which is renamed to :analysis_id in the configuration controller. I want the same parameter name in both.
May I ask why you want the same parameter name, as it is accessible to both of the controller.
Because the configuration controller will be nested in several resources, and the :project_id will be different each time, preventing me to write generic code.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.