Reputation: 548
I have cleaned up my deep routes and replaced them with shallow routes thanks to great input. I'm trying to get a custom method working and missing connecting the dots on something. My routes.rb has these lines:
resources :members, shallow: true do
resources :events, shallow: true do
get 'complete' => 'events#complete'
resources :items
end
end
My goal is to be able to call 'events/:id/complete' on an event an event to complete it and do post processing for it. The above route adds this following route:
event_event_complete GET /events/:event_id/complete(.:format) events#complete
member_events GET /members/:member_id/events(.:format) events#index
POST /members/:member_id/events(.:format) events#create
new_member_event GET /members/:member_id/events/new(.:format) events#new
edit_event GET /events/:id/edit(.:format) events#edit
event GET /events/:id(.:format) events#show
PATCH /events/:id(.:format) events#update
PUT /events/:id(.:format) events#update
DELETE /events/:id(.:format) events#destroy
Currently controller action:
def complete
@event = Event.find(params[:event_id])
end
How I thought it should be:
def complete
@event = Event.find(params[:id])
end
Seems like I'm putting it in the wrong place or missing something since it passes the event as :event_id instead of :id. Everything works but it seems like this is messier then it should be so I'm betting I'm doing something silly wrong.
Thanks in advance for any help!
Mark
Upvotes: 0
Views: 616
Reputation: 4065
do this with @event = Event.find(params[:id])
resources :members, shallow: true do
resources :events, shallow: true do
member do
get 'complete' => 'events#complete'
end
resources :items
end
end
Upvotes: 0
Reputation: 53038
Update your routes as below:
resources :members, shallow: true do
resources :events, shallow: true do
member do
get 'complete' => 'events#complete'
end
resources :items
end
end
This way you would receive event id in params[:id]
instead of params[:event_id]
for complete
actions route.
Upvotes: 1