2014-10-11 17 views
0

我試圖用rails中的remote: true命令刪除帖子。當我不使用ajax時,一切正常。但是,當我使用遠程真正的命令我得到一個路由錯誤。當使用遠程真時刪除ROR路由錯誤中的方法

觀點:

<% @posts.each do |post| %> 
    <%= post.title %> 
    <%= link_to 'delete', post_path(post), method: :delete, data: { confirm: 'Are you sure?' }, remote: true %> 
<% end %> 

控制器:

def index 
    @posts = Post.all 
end 

def destroy 
    @post = Post.find(params[:id]) 
    @post.destroy 
    redirect_to :back 
end 

路線:

resources :posts 

這是我的錯誤日誌中獲得。

Started DELETE "/posts" for 127.0.0.1 at 2014-10-11 12:46:33 +0200 
ActionController::RoutingError (No route matches [DELETE] "/posts"): 

在此先感謝。

更新。當我寫rake routes時,我會得到這個。

DELETE  /posts/:id(.:format)     posts#destroy 
+1

試試這個'<%​​= link_to'delete',post,method :: delete,data:{confirm:'你確定嗎? },remote:true%>' – anusha 2014-10-11 11:38:50

+0

後端報告沒有方法刪除路由,所以前端發送正確的方法,但問題出在路由中,但路由看起來很好,嘗試運行'rake routes'和確保你在路線中有正確的路線 – 2014-10-11 11:41:32

+0

它確實有效anusha。謝謝!但由於某種原因,它似乎正在向不同的路由發出兩個刪除請求。如果我在日誌中看到我得到這第一個「開始刪除」/ posts/198「爲127.0.0.1在2014年10月11日14:28:03 +0200」和右後我得到這個「開始刪除」/職位「對於127.0.0.1在2014-10-11 14:28:03 +0200「我得到一個路由錯誤。 – niiicolai 2014-10-11 12:30:40

回答

0

爲了得到這個工作。

變化:

def destroy 
@posts = Post.find(params[:id]) 
@posts.destroy 
redirect_to :back 
end 

要這樣:

def destroy 
@posts = Post.find(params[:id]) 
@posts.destroy 
respond_to do |format| 
    format.html { redirect_to posts_url } 
    format.js { head :no_content } 
end 
end 

和:

<%= link_to 'delete', post_path(post), method: :delete, data: { confirm: 'Are you sure?' }, remote: true %> 

到:

<%= link_to 'delete', post, method: :delete, data: { confirm: 'Are you sure?' }, remote: true %> 
0

因爲任何人有任何問題,我設法解決它通過添加:data => { :type => :json }到鏈接。

例如:

<%= link_to "Delete this post", @post, :method => :delete, :remote => true, :data => { :type => :json } %> 

我想象UJS期待HTML,但返回JSON所以失敗並再次職位(我注意到兩個請求)。

希望這有助於!

相關問題