2016-06-19 11 views
0

私はコントローラのリファクタリングに取り組んできました。問題は、コントローラ固有のメソッドをどこで作成する必要がありますか?例えばリファクタリングコントローラ、どこに新しいメソッドを作成しますか?

、コントローラ内の私のcreateアクションは、現在のようになります。メソッドあたり5つの系統:私はそれらのいずれかがあること、Sandi Metz' rules for developersを使用してに向けて作業を開始しています

scores_controller.rb 

def create 
    @score = @user.scores.new(score_params) 
    if @score.save 
     set_shuffled_questions(@score, params[:score][:selected]) 
     questions = Score.build_quiz(@score, params[:score][:selected]) 
     question = questions.shuffle.first 
     cookies[:question] = question.question 
     flash[:success] = "Begin quiz, good luck!" 
     redirect_to score_quiz_path(@score, question) 
    else 
     flash[:alert] = "You suck" 
     render 'new' 
    end 
    end 

。私の最も本質的な本能は、このコントローラーのためのメソッドでいっぱいになったまったく新しいクラスを作成すること以外は、Score.rbというモデル内に置くことです。私はあなたがモデルから永続的なクッキーを設定することができないということで、これはそれを行うには正しい方法ではないかなり確信

score.rb 

# Creates quiz with shuffled questions. 
    def set_shuffled_questions(selected) 
    questions = Score.build_quiz(self, selected) 
    question = questions.shuffle.first 
    cookies[:question] = question.question 
    flash[:success] = "Begin quiz, good luck!" 
    redirect_to score_quiz_path(self, question) 
    end 

scores_controller.rb 

    def create 
    @score = @user.scores.new(score_params) 
    if @score.save 
     @score.set_shuffled_questions(params[:score][:selected]) 
    else 
     flash[:alert] = "You suck" 
     render 'new' 
    end 
    end 

:それが事実だった場合、私はに方法を変更することができるだろう。メソッドでコントローラをリファクタリングする適切な方法は何ですか?

答えて

0

第1に、「」の方法につき「」行について。文字通りそれを取らないでください。私はそれがちょうど「あなたのコントローラーをスリムに(そしてモデルはフラット) "と言います。コード行ではなく、コントローラメソッドで "責任"、ビジネスロジックなどを数える方が良いです。さらに、Rubyでは複数行のコードを1行に書くことができますし、ボイラープレートコードなどもあります。とにかく文字通り取らないでください。

「コントローラコードはどこに置くのですか?」それがビジネスロジックの場合は、それをモデルまたはクラスに分けてください。論理的にコードを分離したいのであれば、コントローラとリファクタのプライベートメソッドを作成するだけです。コードのいくつかの部分を複数のコントローラ/クラス間で共有する必要がある場合は、別のユーティリティクラスを作成します。

関連する問題