我正在使用 Cancan 来授权我的评论资源并设计进行身份验证。我有以下控制器,当我没有使用 devise 登录并尝试发布新评论时,用户将被重定向到登录页面(new_user_session_path),因为他们必须登录才能创建评论。但是,如果我在未登录的情况下发布新的评论使用remote: true
,它会通过在 Chrome 控制台中渲染create.js.erb
并使用 html 响应,并在解析时出现错误@comments.any?
,这应该是 nil。但是,如果用户尚未登录但想提交评论,我想获得类似 :unauthorized 或 501 的状态代码,因此我可以使用 jQuery 捕获它并调出登录表单。我以为gem cancan
提供的load_and_authorize_resource
甚至会阻止我的请求执行该操作,但显然不是。我应该怎么做才能获得状态响应而不是采取行动?谢谢!
class CommentsController < ApplicationController
load_and_authorize_resource
#should I also add a devise authenticate_user! before filter here?
def create
@commentable = find_commentable
@comment = current_user.comments.build(params[:comment].merge(:commentable => @commentable))
if @comment.save
respond_to do |format|
format.html { redirect_to @commentable, :notice => "Successfully created comment."}
format.js {@comments = @commentable.comments}
end
else
respond_to do |format|
format.html { redirect_to @commentable, :notice => "Comment NOT created."}
format.js { render :status => :internal_server_error }
end
end
end
end