我有一点问题,这段代码有效:
def create
@article = Article.find(params[:article_id])
if verify_recaptcha
@comment = @article.comments.create(comment_params)
redirect_to article_path(@article)
else
redirect_to article_path(@article)
end
end
为什么这段代码不起作用?:
def create
@article = Article.find(params[:article_id])
if verify_recaptcha
@comment = @article.comments.create(comment_params)
redirect_to article_path(@article)
else
render(
html: "<script>alert('Recaptcha error!')</script>".html_safe,
layout: 'application'
)
redirect_to article_path(@article)
end
end
我收到此错误:
AbstractController :: CommentsController中的DoubleRenderError #create 在此操作中多次调用渲染和/或重定向。
请注意,您只能调用渲染或重定向,每次操作最多一次。
另请注意,redirect
和render
都不会终止操作的执行,因此如果要在重定向后退出操作,则需要执行redirect_to(...) and return
之类的操作。
答案 0 :(得分:1)
不要将render
与redirect_to
合并。您已将application.html.erb
文件呈现为布局,而html是您指定的script
。
如果你想使用render
,你必须知道这个没有在目标行动中运行任何代码,所以,如果你想重新分配&#34;您必须使用@article
变量redirect_to
,如果您想添加一些消息以通知用户,那么您可以添加flash
消息,然后您可以显示该消息在你看来:
...
else
flash[:error] = 'Recaptcha error!'
redirect_to @article
end
然后在你看来:
<% if flash[:error] %>
<div class="error">
<%= flash[:error] %>
</div>
<% end %>
答案 1 :(得分:0)
我建议您尝试 render_to_string 而不是 render。
来源:https://api.rubyonrails.org/v6.1.0/classes/AbstractController/Rendering.html
问候