Rails中的DRY控制器3.2

在进行代码气候分析后,我发现我的控制器并非干燥。 方法如:

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 

在所有控制器中基本相同。

基本上,脚手架轨道生成的代码在所有控制器中都是“相同的”。 我怎样才能以一种真正好的方式使它更干净,更干爽?

提前致谢

您可以使用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 

没有必要按照您所述的方式制作代码DRY。 考虑一下,使代码DRY的主要目的之一是,如果您在一个地方更新代码,则不必在其他地方更新代码。 但是,在您的情况下,如果您在Controller X中更新代码,那么您在Controller Y中进行相同更改的可能性有多大? 如果不是,那么它不是抽象的好候选者。 (事实上​​,如果你甚至要在X中远程改变一些不会影响Y的东西,那么它对于DRY-ness来说是一个糟糕的候选者)

通常,抽象是好的。 但是,过度抽象不是一件好事,应该避免。

Ken Li是对的,过度抽象不是一件好事,在这种情况下有点不必要,但如果你的控制器中有重复的代码,你可以使用Before,Around和Afterfilter来干掉代码。