从控制器返回元素ID到Ajax响应

时间:2013-03-23 09:45:43

标签: jquery ruby-on-rails ajax

我发送一个Ajax POST调用来创建一个新的评论。我希望我的控制器返回新对象的ID,这样我就可以用它来更新我网页上的几个元素。我得到的唯一功能回报是完整的网页代码。

这是Ajax:

$(document).ready(function(){

    $(".new_rate_restaurant").change(function(e){
        e.preventDefault();
        var path = $(this).closest("form").attr("action");
        $.ajax({
            type: 'POST',
            url: path,
            data: $(this).closest("form").serialize(),
            success: function(response){
                alert(response);

            }
        });     

    });

});

这是我的控制器:

if @review = Review.create(@attr)
            flash[:success] = "Review saved. Share with friends!"
            #render :json => @review
        else
            flash[:error] = @review.errors.full_messages.to_sentence
        end

        respond_to do |format|
            format.html {redirect_to @restaurant}
            format.js 
            format.json 
        end

这是没有用的:

在创建审核之后或在respond_to块中放置render :json => @review.id。至少不是因为它在flash [:success]

下的评论中输入

祝你好运!我真的希望很快得到一些答复!

1 个答案:

答案 0 :(得分:2)

在Javascript中发送请求时,将dataType指定为json

$.ajax({
    type: 'POST',
    dataType: 'json',
    // other stuff goes here
});

并返回新的review ID,如下所示:

respond_to do |format|
  format.html { redirect_to @restaurant }
  format.js 
  format.json { render :json => @review }
end