我正在建立的博客上有评论表。
博客帖子很长,因此表单位于页面底部的屏幕外。
如果评论未通过验证,则会将用户带回页面顶部,但错误消息会在表单的下方显示。
我希望浏览器专注于评论部分,以便用户看到验证错误消息。
这是我的comments_controller的创建动作:
def create
@article = Article.find(params[:article_id])
@comment = @article.comments.build(params[:comment])
if @comment.save
redirect_to article_path(@article), notice: "Thanks for your comment"
else
# is there anyway to pass an id (like #comments) to this render call??
render 'articles/show'
end
end
如您所见,如果验证失败,我会致电render 'articles/show'
。我希望能够做到这样的事情:
render 'articles/show', :anchor => '#comments'
在理想世界中,上面的代码将呈现文章#how,并将视口焦点设置在评论部分。我知道我可以在使用link_to
时传递锚点,但是我可以使用render
吗?
这样的事情是否可行,或者我需要使用Ajax解决方案吗?
答案 0 :(得分:1)
我认为render
无法完成你想要的工作。因为render
将呈现整个页面(包括布局),但不会呈现您想要更改的唯一文本。
我建议你使用jQuery的Ajax,这更加简单明了。
答案 1 :(得分:1)
您不需要Ajax - 简单的jquery应该可以工作。
像这样的东西(用错误类替换'.error-messages'):
$(document).ready(function(){
if ($(.error-messages).length) {
$('body').animate({scrollTop:$('.error-messages').offset().top})
}
})
在页面加载时,如果有任何错误消息,页面将滚动到错误消息。