AJAX调用返回500错误 - Ruby on Rails

时间:2015-06-18 16:11:20

标签: jquery ruby-on-rails ruby ajax

我的视图中有一个ajax调用,当我点击upvote / downvote按钮(应该是POST http请求)时触发。但是,AJAX返回内部500错误(我认为这是因为没有投票视图文件)

控制器文件

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p><span maxlength="10" value="1" contenteditable="true" data-store="#yourtext"></span></p>
<input type="hidden" id="yourtext" name="yourtext" />
<p>The hidden input value: <b><span id="current_value"></span></b></p>

使用AJAX查看文件

class PostsController < ApplicationController


def vote
    PostsVote.create(
        user_id: session[:id],
        post_id: vote_params[:post_id].to_i,
        vote: vote_params[:vote].to_i)
    @post = Post.find(vote_params[:post_id])
    votes_total = @post.posts_votes.sum(:vote)
    {post_id: @post.id, votes: votes_total}.to_json
end

private

def vote_params
    params.permit(:post_id, :vote)
end
end

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

你是对的;你得到错误是因为Rails试图渲染投票视图,而这个视图并不存在。由于您未在render操作中调用redirect_tovote,因此Rails默认会尝试呈现模板。

看起来你只想用JSON回复,你可以这样做:

def vote
  PostsVote.create(
      user_id: session[:id],
      post_id: vote_params[:post_id].to_i,
      vote: vote_params[:vote].to_i)

  @post = Post.find(vote_params[:post_id])
  votes_total = @post.posts_votes.sum(:vote)

  render json: {post_id: @post.id, votes: votes_total} # to_json is called automatically
end

我已经假设这个动作总是通过Ajax调用,并且总是希望返回JSON。如果您要有多种类型的回复,则需要respond_to块。 Here's an example with respond_to from the official guides.