2017-04-24 46 views
0

我的測驗模型和我的quiz_session模型之間有一對一關聯,當我嘗試訪問測驗控制器中的@quiz.quiz_session時,quiz_session對象爲零。 但是當我在rails控制檯中檢查我的quiz_session對象時,它顯示了一個引用的測驗。rails引用對象nil

# 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

在'show'方法的開頭添加'@quiz = Quiz.find(1)'以檢查它是否適用於'quiz_id' 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包含quiz_id = 1,但是,這不是一個很好的解決方案,以硬編碼的東西。您應該制定邏輯以通過請求&中的測驗ID,然後動態地創建@quiz = Quiz.find(params[:quiz_id])。目前,您可以使用上述解決方案。

+0

我做過了,但是我得到了同樣的錯誤:在Quizzes#show中NoMethodError。另外:我不想將所有測驗會話連接到ID爲1的測驗,但測試很好 - 謝謝:) – megahra

+0

粘貼日誌。 –

+0

因爲我無法編輯我的問題在這裏的開發日誌:[鏈接](https://pastebin.com/GJChK77C) – megahra