0

私は現在2つのモデルを持ってSchoolおりCourse、学校has_manyのコースとコースbelongs_toの学校があります。さらに、SchoolとCourseはネストされたリソースであり、Schoolは親リソースであり、Courseは子です。

Rails Consoleでいくつかのテストレコードを作成したので、子供が親を呼び出したときなどのクエリが正常に実行され、学校のすべての関連情報が関連付けられてCourse.first.school返されます。Course.first

ただし、コントローラー関数に入れると、代わりに次の行で「undefined method `school'for nil:NilClass」というエラーが発生します。

redirect_to school_course_path(@course.school, @course)

...schoolパーツが認識されなかったかのように(コンソールにあった場合)。なぜこれが当てはまるのですか、そしてどうすればこのエラーを乗り越えることができますか?ありがとう!

編集-提案されているように、@courseインスタンス変数がコントローラーのメソッドからメソッドに渡されていない可能性があります。プライベートメソッドを介してそれらをパススルーしようとしましたが、それでも同じエラーが発生します。これが私のコードです(背景:モデルQuestionbelongs_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
4

3 に答える 3

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
于 2013-01-15T04:23:41.640 に答える
0

あなたのコードは大丈夫です。リダイレクトに問題があるようです..それを root_path にリダイレクトし、それが機能しているかどうかを確認してください??

于 2013-01-15T04:17:26.683 に答える
0

create アクションに次のようなものがあることを確認してください。

@course = Course.new(params[:course])
于 2013-01-15T03:56:34.410 に答える