2016-05-23 8 views
2

最近、私はRubocopを使い始めましたが、私のコードについてもっとよく考えようと努力しています。私は非常に似ている作成方法と更新方法を持っています。 Rubocopは、このメソッドにコードの行が多すぎると訴えています[12/10]。ここでDRYの原則に従う方法について私は思っています。 respond_toは独自のプライベートメソッドに持ち込むべきだと私には思われます。それが更新された場合のモデルが保存され、その他の場合は危険 このRubyコードの乾燥

  • つのチェック:成功したか:

    1. フラッシュが使用できます。しかし、私は以来、それを行うための最善の方法だろうかを把握することはできませんモデルが保存されたか、それは誤り

    を持っていた場合、私はちょうどそれだけを残すべきであるならば、私も知らない場合に応じて、

  • 異なるレンダリング。それがとても冗長であるという事実は本当に私にもなっています。究極の私は、彼らが2に仕えるように私は、ちょうど私がそれをcreateupdateから、単一の方法をしようとするために、任意の意味をなさない

    def create 
        @category = Category.new(category_params) 
    
        respond_to do |format| 
         if @category.save 
         flash[:success] = 'Category Successfully Created' 
         format.html { redirect_to admin_category_path(@category) } 
         format.json { render :show, status: :created, location: @category } 
         else 
         flash[:danger] = 'Errors in creating category, see below' 
         format.html { render :new } 
         format.json { render json: @category.errors, status: :unprocessable_entity } 
         end 
        end 
        end 
    
        def update 
        @category = Category.find(params[:id]) 
    
        respond_to do |format| 
         if @category.update(category_params) 
         flash[:success] = 'Category Successfully updated!' 
         format.html { redirect_to admin_category_path(@category) } 
         format.json { render :show, status: :created, location: @category } 
         else 
         flash[:danger] = 'Errors in updating category, missing information' 
         format.html { redirect_to action: 'edit', id: @category.id } 
         format.json { render json: @category.errors, status: :unprocessable_entity } 
         end 
        end 
        end 
    
  • +0

    グレート質問です!それでも、1つ以上の正解があるため、「主に意見に基づく」とみなすことに投票します。 –

    +0

    これは作業コードなので、SOには適していません。 [CodeReview](http://codereview.stackexchange.com/)に投稿する必要があります。 –

    答えて

    1

    この方法を乾かす必要がある場合はわからない、クリーンなコードを持つようにしたいです非常に異なる目的。

    代わりに、次のことを考慮することができます:

    • は、あなたが本当にJSON形式が必要なのでしょうか?使用していない場合は、それらの行を安全に削除することができます。
    • updateから@category = Category.find(params[:id])を削除し、before_action

      before_action :find_category, only: [:edit, :update] 
      
      def find_category 
          @category = Category.find(params[:id]) 
      end 
      
    • 最後のではなく、少なくとも、Rubocopは常に正しい答えを持っていない方法に移動:鮮明にフォーカス!

    +0

    あなたの答えをありがとう。それが私の大きな問題でした。私は最終的には明確さを求めました。私はあなたの提案のいくつかに取り組むだろうし、それがどのように行くか見る! – ajk4550

    0

    メッセージの1つの単語を除いて、すべての成功処理は同じです。エラー時のJSON処理は同じです。したがって、これらの部分は、作成と更新の両方によって呼び出されるメソッドに抽出できます。コードがより簡潔になるだけでなく、動作が同一で動作が異なることが読者には明らかです。私はこのコードを実行したり、テストしていませんが、ここでは、次のとおりです。

    def handle_success(created_or_updated) 
        verb = created_or_updated == :created ? 'Created' : 'Updated' 
        flash[:success] = "Category Successfully #{verb}" 
        format.html { redirect_to admin_category_path(@category) } 
        format.json { render :show, status: :created, location: @category } 
    end 
    
    
    def handle_failure_json 
        format.json { render json: @category.errors, status: :unprocessable_entity } 
    end 
    
    
    def create 
        @category = Category.new(category_params) 
    
        respond_to do |format| 
        if @category.save 
         handle_success(:created) 
        else 
         flash[:danger] = 'Errors in creating category, see below' 
         format.html { render :new } 
         handle_failure_json 
        end 
        end 
    end 
    
    
    def update 
        @category = Category.find(params[:id]) 
    
        respond_to do |format| 
        if @category.update(category_params) 
         handle_success(:updated) 
        else 
         flash[:danger] = 'Errors in updating category, missing information' 
         format.html { redirect_to action: 'edit', id: @category.id } 
         handle_failure_json 
        end 
        end 
    end 
    
    関連する問題