在调用倒数模型方法时,获取“未定义的Nil类方法”错误

时间:2013-01-15 03:14:54

标签: ruby-on-rails ruby-on-rails-3

我目前有两个模型SchoolCourse,其中包括学校has_many课程和课程belongs_to。此外,学校和课程是嵌套资源,其中学校是父资源,课程是孩子。

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

但是,当放入控制器函数时,我会为以下行获取错误“未定义的方法`学校'为nil:NilClass”:

redirect_to school_course_path(@course.school, @course)

..好像.school部分未被识别(在控制台中的位置)。为什么会这样,我如何通过这个错误?谢谢!

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

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

3 个答案:

答案 0 :(得分:1)

如果你的关系按照我认为的方式设置,那么应该有效:

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

答案 1 :(得分:0)

确保您在创建操作中有类似的内容:

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

答案 2 :(得分:0)

你的代码没问题,你的重定向似乎有问题..将它重定向到root_path并检查它是否正常工作?