kdweber89
kdweber89

Reputation: 2174

Rails Routing from a plural to singular resource

I had built a feature in my app in which I had created some content settings that could be changed within my database. However I ran into an issue that required me to use a polymorphic route. This ended up causing me lots of issues because my routes had two ID's associated with them. I realized that the reason why this was the case was that my resource in my routes file was plural. So I made it singular, and now i'm having issues getting the simple routes to work out.

My routes file is like so

concern :content_settings do
  resources :content_setting, only: [:index, :edit, :delete, :update]
end

When I run a rake routes I'm getting so

admin_customer_content_setting_index GET     /admin/customers/:customer_id/content_setting(.:format)              admin/content_setting#index
edit_admin_customer_content_setting  GET     /admin/customers/:customer_id/content_setting/:id/edit(.:format)     admin/content_setting#edit
admin_customer_content_setting       PATCH   /admin/customers/:customer_id/content_setting/:id(.:format)          admin/content_setting#update   
                                     PUT     /admin/customers/:customer_id/content_setting/:id(.:format)          admin/content_setting#update

Now basically I am at a point where I need to implement a route to the editing options of my new awesome feature. I keep trying something along the lines of..

=link_to edit_admin_customer_content_setting_path(@owner)

I continue getting a 'no route options' error. Would anybody know if there is something that I am missing? I'm happy to show more of my code if needed.

Much thanks!

Upvotes: 0

Views: 416

Answers (1)

bosskovic
bosskovic

Reputation: 2054

Please try this

= link_to edit_admin_customer_content_setting_path(customer_id: @owner.id, id: @content.id)

When you take a look at the output of the rake routes, you can see that in the third column you are being told what parameters it expects:

edit_admin_customer_content_setting  GET     /admin/customers/:customer_id/content_setting/:id/edit(.:format)     admin/content_setting#edit

In your case: customer_id and id


UPDATE

If you would like to avoid passing two ids to your helpers, you can use shallow routes. Please take a look at the documentation here (scroll little bit down to Shallow Nesting)

Upvotes: 2

Related Questions