2017-12-30 10 views
0

コメントコントローラでは、作成と破棄の両方の後、記事の表示ページにリダイレクトしています。 だから私はredirect_toを行うafter_actionと書くことに決めました。after_actionでredirect_toを呼び出すと、なぜ "AbstractController :: DoubleRenderError"が表示されるのですか?

class CommentsController < ApplicationController 
    before_action :find_article 
    before_action :find_comment, only: [:destroy] 

    after_action :goto_articles_page, only: [:create, :destroy] 

    def create 
    @comment = @article.comments.create(comment_params) 
    end 

    def destroy 
    @comment.destroy 
    end 

    private 

    def comment_params 
     params.require(:comment).permit(:commenter, :body) 
    end 

    def find_article 
     @article = Article.find(params[:article_id]) 
    end 

    def find_comment 
     @comment = @article.comments.find(params[:id]) 
    end 

    def goto_articles_page 
     redirect_to article_path(@article) and return 
    end 
end 

しかし、これは作成と破棄の両方後に私にAbstractController::DoubleRenderErrorを与えます。

なぜこのエラーが発生しますか?私はreturnときrendering任意のアクションが、ときredirect_to使用、その後returnを使用する必要はありませんを使用すると、最終的にあなたがand return

Rails guideを削除することができると思い

+0

任意の効果場合はわからないが、goto_articles_page – Maxence

+0

から何を削除したときに起こる 'とreturn'私は両方のケースでエラーを取得し、「付きとなし'とreturn'」 – Sheryl

+0

次の行で 'return'を使って' and return'を変更してみてください。 –

答えて

0

デフォルトでは、Railsは次のビューをレンダリングします。コントローラの動作に対応します。 See Rails Guides.

あなたのcreatedestroyアクションでは、Railsはデフォルトでレンダリングを実行しています。その後、あなたのafter_action(アクションはの後にになります)がリダイレクトされているので、2重レンダリングです。

after_actionの代わりに、コントローラアクションでgoto_articles_pageメソッドを呼び出すことができます。例えば

def destroy 
    @comment.destroy 
    goto_articles_page 
    end 

    def goto_articles_page 
    redirect_to article_path(@article) #return not needed 
    end 
+0

それは助けました。ありがとうマイク:) – Sheryl

0

は非常にうまく、あなたがこの慎重

redirect_to説明

に従うことができることを説明しました

願う

関連する問題