在rails控制器中重构代码

Sas*_*sha 1 refactoring controller ruby-on-rails

我的控制器中有两个动作

def up_vote
    lesson = Lesson.find(params[:id])
    current_user.up_vote!(lesson)
    flash[:message] = 'Thanks for voting!'
    redirect_to lesson_path(lesson)
end

def down_vote
    lesson = Lesson.find(params[:id])
    current_user.down_vote!(lesson)
    flash[:message] = 'Thanks for voting!'
    redirect_to lesson_path(lesson)
end
Run Code Online (Sandbox Code Playgroud)

我想知道什么是重构这个(记住DRY)的好方法?我在网上读到我不应该试图滥用before_filter.我还能用什么呢?谢谢!

ffo*_*oeg 6

def vote_up
  vote(:up)
end

def vote_down
  vote(:down)
end

protected

def vote(direction)
  lesson = Lesson.find(params[:id])
  current_user.send :"#{direction}_vote!",lesson
  flash[:message] = 'Thanks for voting!'
  redirect_to lesson_path(lesson)
end
Run Code Online (Sandbox Code Playgroud)