2017-07-31 4 views
0

私は私のプロジェクトのためのカスタムサービスを書いた:Railsの - カスタムサービスで認識されていない渡されたパラメータ[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 

私はこのような私の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生成ユーザーを使用しています。また、Userモデル(Teacher and Student)を継承する2つのモデルを使用していますが、すべての属性は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(current_user) 

または変更メソッドのシグネチャに

QuizDataCreation.new(user: current_user) 

変更を。

+0

パラメータについて新しいことを学んだり、ありがとうございました!それはそれを修正! :) – megahra

関連する問題