8

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

   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

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

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

提前致谢

4

3 回答 3

11

无需按照您所说的方式使代码干燥。想一想,使代码 DRY 的主要目的之一是,如果您在一个地方更新代码,则不必在另一个地方更新代码。但是,在您的情况下,如果您在控制器 X 中更新代码,那么您在控制器 Y 中进行相同更改的可能性有多大?如果不是,那么它不是抽象的好选择。(事实上​​,如果你甚至要远程更改 X 中不会影响 Y 的东西,那么它是 DRY-ness 的糟糕候选者)

一般来说,抽象是好的。但是,过度抽象并不是一件好事,应该避免。

于 2012-10-11T00:43:43.220 回答
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
于 2012-10-11T05:53:25.797 回答
2

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

于 2012-10-11T01:02:57.907 回答