0

我有一个看起来像这样的控制器动作 -

    def upvote
      @post = Post.find(params[:id])
      if user_has_rated_post?

        # I want to interrupt AJAX here

        redirect_to[:forum, @post.question], :notice => "You already voted for this post"
      else
        @post.upvote
        add_rating_to_post(1, @post)
        @post.save

        redirect_to[:forum, @post.question], :notice => "Post Up Voted"
      end
    end

我有一个 AJAX 调用来对一个帖子进行投票,它工作得很好,除非我需要它来停止 AJAX 调用,如果第一个条件是 user_has_rated_post?满足。

所以问题是我如何中断或强制错误返回 AJAX,或者我应该尝试以另一种方式解决这个问题?

4

1 回答 1

1

是的,您必须返回 jQuery(或您的 AJAX 解决方案)解释为错误的内容。然后你将不得不在 javascript 代码中处理这个错误(或者如果合适的话什么也不做)。我认为任何高于 400 的东西按照惯例都被认为是错误的。查看 HTTP 状态代码列表并选择最适合您的一个http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html。在这里,我敢打赌 403 - 服务器理解请求,但拒绝执行。你总是可以只渲染 500,但我认为最好是具体的。

于 2012-06-05T06:05:35.647 回答