vlasits
vlasits

Reputation: 2235

Getting ActionController::RoutingError when the route is listed in output of Rake Routes

I have models Drill and Exercise. Exercises belong to Drills and I have routes.rb with:

resources :drills do
    resources :exercises do
end

Therefore it is not surprising to see this output from rake routes:

drill_exercises GET    /drills/:drill_id/exercises(.:format)                                      exercises#index
                              POST   /drills/:drill_id/exercises(.:format)                                      exercises#create
           new_drill_exercise GET    /drills/:drill_id/exercises/new(.:format)                                  exercises#new
          edit_drill_exercise GET    /drills/:drill_id/exercises/:id/edit(.:format)                             exercises#edit
               drill_exercise GET    /drills/:drill_id/exercises/:id(.:format)                                  exercises#show
                              PUT    /drills/:drill_id/exercises/:id(.:format)                                  exercises#update
                              DELETE /drills/:drill_id/exercises/:id(.:format)                                  exercises#destroy

What is surprising is that this line of code:

<%= link_to t('.new', :default => t("helpers.links.prompt")),
      new_drill_exercise_path,
      :class => 'btn btn-primary', :remote => true %>

Is resulting in this error:

ActionController::RoutingError at /drills/6/edit

No route matches {:action=>"new", :controller=>"exercises"}

Despite the fact that when I call controller.methods in IRB one of the results I get back is :new_drill_exercise_path

So... what's up with that?

More info:

exercises_controller.rb

class ExercisesController < InheritedResources::Base
  def new
    @drill = Drill.find(params[:id])
    @exercise = Exercise.new
    respond_to do |format|
      format.html { redirect_to(:action => 'edit')  }
      format.js 
    end 
  end
end

Upvotes: 0

Views: 72

Answers (1)

PinnyM
PinnyM

Reputation: 35531

You are missing the drill_id that is required for the path. Try:

new_drill_exercise_path(@drill)

or:

new_drill_exercise_path(params[:id]) # assumes this is inside `DrillsController#show` or similar

Upvotes: 1

Related Questions