2017-04-24 5 views
0

J'ai une association un à un entre mon modèle de quiz et mon modèle de quiz_session, et quand j'essaie d'accéder à @ quiz.quiz_session dans le contrôleur de quiz, l'objet quiz_session est nul. Mais quand je regarde mon objet quiz_session dans la console des rails, il montre un quiz référencé.rails référencés objet 0il

# 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"> 

Je suis nouveau sur Ruby on Rails et utilise Rails 5.0.2. Toute aide serait appréciée :)

+0

Qu'est-ce que '@ quiz' pour lequel vous obtenez' nil' pour 'quiz_session'? – Sajin

+0

ajouter '@quiz = Quiz.find (1)' au début de la méthode 'show' pour vérifier si elle fonctionne pour' quiz_id' 1 – Sajin

+0

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

Répondre

0

Essayez le ci-dessous:

# 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 

Ceci est parce que votre quiz_session contient quiz_id = 1. Mais ce n'est pas une bonne solution pour les choses hardcode. Vous devriez faire une logique pour passer l'identifiant du quiz de la demande & puis faire le @quiz = Quiz.find(params[:quiz_id]) dynamiquement. Pour l'instant, vous pouvez utiliser la solution ci-dessus.

+0

Je l'ai fait, mais j'ai la même erreur: NoMethodError dans Quizzes # show. Aussi: Je ne veux pas connecter toutes les sessions de quiz au quiz avec l'ID 1, mais c'était bon pour le test - merci :) – megahra

+0

coller les journaux. –

+0

puisque je ne peux pas éditer ma question ici le journal de développement: [link] (https://pastebin.com/GJChK77C) – megahra