轨道上的红宝石 - 调用倒数模型方法时出错"undefined method for Nil Class"



我目前有两个模型SchoolCourse,其中学校has_many课程和学校belongs_to课程。另外,School和Course是嵌套的资源,其中School是父资源,Course是子资源。

我在Rails控制台中创建了几个测试记录,以便查询,例如当孩子调用父Course.first.school成功执行并返回与Course.first相关的学校的所有相关信息。

然而,当放入控制器函数时,我会得到一个错误"undefined method ' school' for nil:NilClass"对于以下行:

redirect_to school_course_path(@course.school, @course)

. .就好像.school部分没有被识别出来(就像它在控制台一样)。为什么会出现这种情况,我如何克服这个错误?谢谢!

编辑-如建议的那样,可能是我的@course实例变量没有在控制器中从方法传递到方法。我试图通过一个私有方法传递它们,但它仍然给我同样的错误。这是我的代码(背景:模型Question belongs_to Course, Course有很多问题。当然不是嵌套路由的一部分)

class QuestionsController < ApplicationController
  def new
    @course = Course.find(params[:course]) #confirmed working
    self.current_course = @course #I attempt to set current_course, a private method 
    @question = Question.new
  end
  def create
    @question = Question.new(params[:question]) #also works, in rails console all the questions confirms to have rails id
    if @question.save
      redirect_to school_course_path(current_course.school, current_course) #source of my frustrations - continues to returns same error message
    else
      render 'new'
    end
  end
  private 
  def current_course=(course)
    @current_school = course
  end

  def current_course
    @current_course
  end
end

如果你们的关系是按照我认为的方式建立的,那应该会起作用:

def create
  @question = Question.new(params[:question])
  @course = @question.course
  if @question.save
    redirect_to school_course_path(@course.school, @course)
  else
    render 'new'
  end
end

确保在创建操作中有这样的内容:

@course = Course.new(params[:course])

你的代码是好的,似乎有问题在你的重定向。重定向到root_path并检查它是否工作??

相关内容

  • 没有找到相关文章

最新更新