我使用Pull Review来审核我的应用程序代码,然后又回来了:
考虑重构,检测到类似的代码。
发生在:
SkillsController #index
PagesController #index
所以app / controllers / skills_controller.rb索引操作代码是:
def index
@skill = Skill.new
if params[:search]
@skills = Skill.search(params[:search]).order('created_at DESC')
else
@skills = Skill.all.order('created_at DESC')
end
end
并且app / controllers / pages_controller.rb是:
def index
@users = User.all
if params[:search]
@users = User.search(params[:search]).order('created_at DESC')
else
@users = User.all.order('created_at DESC')
end
end
我是否想以某种方式在这两个控制器上重构这两个动作?另外,我不确定如何重构这个。我是否提取if params [:search]段并将实例变量替换为将在两个操作中使用的另一个变量?
感谢您的时间。
答案 0 :(得分:1)
看看has_scope和inherited_resources。您可以使用has_scope提取params [:search]部分。并使用inherited_resources来提取如何获取集合并进行排序。
答案 1 :(得分:1)
我不知道您的方法search
来自哪里。它似乎来自ActiveRecord的自定义模块/ gem。
如果是这样,您可以更改方法以缩短控制器中的代码
def self.search(args)
return self unless args
original_search_logic args
end
# As well as extract order to a scope
scope :by_time, -> { order('created_at DESC') }
然后在控制器中:
# Skill
def index
@skills = Skill.search(params[:search]).by_time
end
# User
def index
@users = User.search(params[:search]).by_time
end
现在这些应该足够干燥了。