2017-07-31 51 views
0

我寫了一個自定義的服務,爲我的項目:導軌 - 傳遞的參數定製服務不承認[NoMethodError]

#app\services\quiz_data_creation.rb: 
class QuizDataCreation 
    def initialize(user) 
    @quiz_session = user.quiz_session #<-- here is the problem 
    end 

    def create 
    create_answer_data 
    end 

    private 
    def create_answer_data 
    @quiz_session.quiz.questions[@quiz_session.current_question_index].answers 
    end 
end 

我調用Create方法在我ActionCable通道是這樣的:

class QuizDataChannel < ApplicationCable::Channel 
    def send_data 
    logger.debug "[AC] before quiz data creation service - current user: #{current_user.inspect}" 
    @answers = QuizDataCreation.new(user: current_user).create 
    #then send answers 
    end 
end 

我遇到的問題是服務無法識別我調用create方法時傳遞的用戶對象,即使記錄器顯示我正在找到正確的對象!它給了我錯誤消息:

NoMethodError - undefined method quiz_session for #<Hash:0xc86cfa0> 

我正在使用Devise生成的用戶。另外,我使用兩個從用戶模型(教師和學生)繼承的模型可能是相關的,但所有屬性都存儲在users表中。

用戶記錄是這樣的:

[AC] before quiz data creation service - current user: #<Teacher id: 1, email: "[email protected]", created_at: "2017-05-11 07:24:48", updated_at: "2017-07-26 08:40:27", name: "Bob", quiz_session_id: 7> 

我將非常高興,如果有人能指出我如何解決這個問題 - 謝謝! :)

回答

1

你宣佈一個位置參數

def initialize(user) 

,但你通過關鍵字參數:

QuizDataCreation.new(user: current_user) 

將其更改爲

QuizDataCreation.new(current_user) 

或改變方法簽名接受關鍵字ARGS 。

+0

學習了一些關於參數的新東西,謝謝!這解決了它! :) – megahra