Ruby on rails 用于创建ajax关系的Relationships controller-NoMethodError:undefined方法“[model]”url';

Ruby on rails 用于创建ajax关系的Relationships controller-NoMethodError:undefined方法“[model]”url';,ruby-on-rails,ruby,ajax,rspec,Ruby On Rails,Ruby,Ajax,Rspec,我相信我的控制器下面的重定向到有问题。一门课程有很多层次,有很多步骤(步骤属于层次,层次属于课程)。我正试图将_重定向到步骤 以下是我的步骤: /courses/:course_id/levels/:level_id/steps/:id(.:format) 以下是我在控制器中的错误: Failure/Error: click_button "check answer" NoMethodError: undefined method `step_url' for #<UserSte

我相信我的控制器下面的重定向到有问题。一门课程有很多层次,有很多步骤(步骤属于层次,层次属于课程)。我正试图将_重定向到步骤

以下是我的步骤:

/courses/:course_id/levels/:level_id/steps/:id(.:format)
以下是我在控制器中的错误:

Failure/Error: click_button "check answer"
 NoMethodError:
   undefined method `step_url' for #<UserStepsController:0x007ff8ccc478c8>

当您有嵌套资源时,不能使用重定向_到@variable。正确的方法是你说

redirect_to course_level_step_url(@step.level.course.id, @step.level.id, @step.id)
因为从实例变量获取路由的东西“认为”您需要小写类名加上_url的路径

    describe "attempting a step" do
        let(:course) { FactoryGirl.create(:course)}
        let(:level) { FactoryGirl.create(:level, course: course) }
        let(:step) { FactoryGirl.create(:step, level: level) }
        before { sign_in user}

        describe "taking a course" do
            before { visit course_level_step_path(course.id, level.id, step.id)}

            it "should increment the user step count" do
                expect do
                    click_button "check answer"
                end.to change(user.user_steps, :count).by(1)
            end

            describe "toggling the button" do
                before { click_button "check answer"}
                it {  should have_selector('input', value: 'remove step')}
            end

        end
redirect_to course_level_step_url(@step.level.course.id, @step.level.id, @step.id)