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にする必要はありません。考えてみてください。コードをDRYにする主な目的の1つは、ある場所でコードを更新する場合、別の場所でコードを更新する必要がないことです。ただし、あなたの場合、コントローラーXでコードを更新する場合、コントローラーYで同じ変更を行う可能性はどのくらいありますか?いいえの場合、それは抽象化の良い候補ではありません。(実際、Yに影響を与えないXの何かをリモートで変更しようとしている場合でも、それは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 に答える