2016-10-19 117 views
0

嘗試使用ajax更新帖子。Rails使用ajax更新

posts_controller.rb

def update 
    if @post.update_attributes(post_params) 
    flash[:notice] = 'Post updated!' 
    redirect_to @post 
    else 
    flash[:alert] = 'Something wrong' 
    render :edit 
    end 
end 

的application.js

$('.simple_form.edit_post').submit('submit', function (e) { 
    e.preventDefault(); 
    form = $(this).serialize(); 
    $.ajax({ 
    type: 'POST', 
    action: $(this).attr('action'), 
    data: form, 
    dataType: 'JSON' 
    }).done(function (data) { 
    alert(data.notice); 
    }).fail(function (data) { 
    alert(data.alert); 
    }); 
}); 

當我嘗試更新我在Chrome控制檯中看到錯誤找不到網頁和報警輸出不確定

+0

這可能有助於http://stackoverflow.com/questions/23967390/rails-flash-notice-via-ajax –

回答

0

首先,您應該提出PUT/PATCH請求,而不是POST請求,因爲您正在進行更新。

此外,您應該指定ajax請求上的網址。

$('.simple_form.edit_post').submit('submit', function (e) { 
    e.preventDefault(); 
    form = $(this).serialize(); 
    $.ajax({ 
     type: 'PATCH', 
     url: '/posts', 
     data: form, 
     dataType: 'JSON' 
    }).done(function (data) { 
     alert(data.notice); 
    }).fail(function (data) { 
     alert(data.alert); 
    }); 
}); 

而且,在你的控制器,你應該能夠在json格式響應Ajax請求。

def update 
    if updated = @post.update(post_params) 
    flash[:notice] = 'Post updated!' 
    else 
    flash[:alert] = 'Something wrong' 
    end 

    respond_to do |format| 
    format.html { updated ? redirect_to @post : render :edit } 
    format.json { render json: flash.to_hash } 
    end 
end