我一直在重構我的控制器,我一直在努力的問題是應該在哪裏創建控制器特定的方法?重構控制器,在哪裏創建新的方法?
例如,我創建一個控制器內的行動將目前的樣子:
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
我開始傾向於使用Sandi Metz' rules for developers,其中之一是工作:每個方法五代線。除了爲這個控制器創建一個全新的類以外,我最自然的本能就是將它放入模型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
我相當肯定這是不是做了正確的方式,是,你不能從模型中設置永久性Cookie。用方法重構控制器的適當方式是什麼?