在进行代码气候分析后,我发现我的控制器并非干燥。 方法如:
def index
@animals = current_user.animals.valid_animals.search(params[:search], params[:page])
respond_to do |format|
format.html # index.html.erb
format.json { render json: @animals }
end
end
在所有控制器中基本相同。
基本上,脚手架导轨生成的代码在所有控制器中都是“相同的”。 我怎样才能以一种真正好的方式使它变得更干净和干燥?
提前致谢
答案 0 :(得分:11)
无需按照您所述的方式制作代码DRY。考虑一下,使代码DRY的主要目的之一是,如果您在一个地方更新代码,则不必在其他地方更新代码。但是,在您的情况下,如果您在Controller X中更新代码,那么您在Controller Y中进行相同更改的可能性有多大?如果不是,那么它不是抽象的好候选者。 (事实上,如果你甚至想在X中远程改变一些不会影响Y的东西,那么它对于DRY-ness来说是一个糟糕的候选者)
一般来说,抽象是好的。但是,过度抽象不是一件好事,应该避免。
答案 1 :(得分:3)
您可以使用respond_with进行这些操作。
class AnimalController < ApplicationController
respond_to :html, :json
def index
@animals = current_user.animals.valid_animals.search(params[:search], params[:page])
respond_with @animals
end
end
答案 2 :(得分:2)
Ken Li是对的,过度抽象不是一件好事,在这种情况下有点不必要,但如果你的控制器中有重复的代码,你可以使用Before, Around and After filters来干掉代码。