在评论控制器中,我在创建和销毁之后重定向到文章显示页面。所以我决定写一个after_action
,它会做redirect_to
。
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
。
为什么我收到此错误?
默认情况下,Rails将呈现与控制器操作对应的视图。 See Rails Guides.
所以在你的create
和destroy
动作中,Rails默认执行渲染。然后你的after_action
(在动作之后发生)重定向,所以它是双重渲染。
您可以在控制器操作中调用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
我认为使用return
当rendering
任何行动,但当redirect_to
使用然后不需要使用return
然后最后你可以删除and return
Rails guide非常好地解释说你可以仔细遵循这一点
希望能有所帮助