0

我有模型DrillExercise. 练习属于演习,我有 routes.rb 与:

resources :drills do
    resources :exercises do
end

因此,从 rake 路由中看到以下输出也就不足为奇了:

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

令人惊讶的是,这行代码:

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

导致此错误:

ActionController::RoutingError at /drills/6/edit

没有路线匹配 {:action=>"new", :controller=>"exercises"}

尽管当我在 IRB 中调用 controller.methods 时,我得到的结果之一是:new_drill_exercise_path

那么……这是怎么回事?

更多信息:

练习控制器.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
4

1 回答 1

1

您缺少drill_id路径所需的内容。尝试:

new_drill_exercise_path(@drill)

或者:

new_drill_exercise_path(params[:id]) # assumes this is inside `DrillsController#show` or similar
于 2013-03-20T14:16:21.480 回答