2017-04-24 4 views
0

私は私のクイズモデルと私のquiz_sessionモデルとの間に1対1の関係があり、クイズコントローラの@quiz.quiz_sessionにアクセスしようとすると、quiz_sessionオブジェクトはnilになります。 しかし、レールコンソールのquiz_sessionオブジェクトをチェックすると、参照されているクイズが表示されます。レール参照オブジェクトなし

# quizzes_controller.rb: 
def show 
    @quiz_session = @quiz.quiz_session 
    logger.debug "quizzes_controller" 
    logger.debug @quiz_session.inspect 
end 

#development.log output: 
quizzes_controller 
nil 

#quiz.rb: 
class Quiz < ApplicationRecord 
    belongs_to :quiz_session, dependent: :destroy 
    accepts_nested_attributes_for :quiz_session, reject_if: :all_blank, allow_destroy: true 
end 

#quiz_session.rb: 
class QuizSession < ApplicationRecord 
    has_one :quiz 
end 

#rails console: 
irb(main):001:0> QuizSession.first 
    QuizSession Load (0.0ms) SELECT "quiz_sessions".* FROM "quiz_sessions" ORDER BY "quiz_sessions"."id" ASC LIMIT ? [["LIMIT", 1]] 
=> #<QuizSession id: 31, access_key: "srtjki356xm", created_at: "2017-04-23 22:54:51", updated_at: "2017-04-23 22:54:51", quiz_id: 1, current_question_index: nil> 
irb(main):002:0> Quiz.find(1) 
    Quiz Load (0.0ms) SELECT "quizzes".* FROM "quizzes" WHERE "quizzes"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] 
=> #<Quiz id: 1, title: "Chapter 1.1", lecture_unit: "2017-03-19", unlocked_at: "2017-03-19 14:00:00", course_id: 1, created_at: "2017-03-19 02:27:28", updated_at: "2017-03-19 02:27:28"> 

私はRuby on Railsが新しく、Rails 5.0.2を使用しています。任意の助けをいただければ幸いです:)

+0

'quiz_session'に' nil'を与える '@ quiz'は何ですか? – Sajin

+0

'quiz_id'のために働いているかどうかをチェックする' show'メソッドの始めに '@quiz = Quiz.find(1)'を追加してください1 – Sajin

+0

'@quiz = Quiz.find(params [:id])' – sa77

答えて

0

は、以下試してみてください。

# quizzes_controller.rb: 
def show 
    @quiz_session = @quiz.quiz_session 
    logger.debug "quizzes_controller" 
    logger.debug @quiz_session.inspect 
end 

#quiz.rb: 
class Quiz < ApplicationRecord 
    has_one :quiz_session, dependent: :destroy 
    accepts_nested_attributes_for :quiz_session, reject_if: :all_blank, allow_destroy: true 
end 
#quiz_session.rb: 
class QuizSession < ApplicationRecord 
    belongs_to :quiz 
end 

あなたquiz_sessionは= 1をquiz_id含まれているためです。しかし、これは、物事をハードコーディングするための良い解決策ではありません。質問&からクイズIDを渡すロジックを作成し、次に@quiz = Quiz.find(params[:quiz_id])を動的に作成する必要があります。今のところ、上記のソリューションを使用することができます。

+0

私はやったが、同じエラーが出る:NoMethodError in Quizzes#show。また、私はすべてのクイズセッションをID 1のクイズに結びつけたくありませんが、テストには良かったです - ありがとう:) – megahra

+0

ログを貼り付けてください。 –

+0

私はここに私の質問を編集することはできませんので、開発ログ:[リンク](https://pastebin.com/GJChK77C) – megahra

関連する問題