2011-02-03 60 views
0

我無法找到銷燬記錄的正確方法。我覺得這是一個完整的新手。Rails - 無法弄清楚如何銷燬記錄

這裏是(從rake routes輸出)有關控制器的路線:

contents GET /admin/contents(.:format)     {:controller=>"contents", :action=>"index"} 
    contents POST /admin/contents(.:format)     {:controller=>"contents", :action=>"create"} 
new_content GET /admin/contents/new(.:format)    {:controller=>"contents", :action=>"new"} 
edit_content GET /admin/contents/:id/edit(.:format)   {:controller=>"contents", :action=>"edit"} 
    content GET /admin/contents/:id(.:format)    {:controller=>"contents", :action=>"show"} 
    content PUT /admin/contents/:id(.:format)    {:controller=>"contents", :action=>"update"} 
    content DELETE /admin/contents/:id(.:format)    {:controller=>"contents", :action=>"destroy"} 

是什麼讓我的底線是不看的比得到任何的不同,並把。

這裏是鏈接:

<%= link_to 'Destroy', content, :confirm => 'Are you sure?', :method => :delete %> 

也試過:

<%= link_to 'Destroy', content, :confirm => 'Are you sure?', :method => :destroy %> 

,輸出是:

<a href="/admin/contents/1400" data-confirm="Are you sure?" data-method="destroy" rel="nofollow">Destroy</a> 

有人能發現什麼,我做錯了什麼? : -/


編輯

我沒有intially有rails.js加載。我現在做的。

這裏是我的破壞行動的內容:

def destroy 
    @content = Content.find(params[:id]) 
    @content.destroy 

    respond_to do |format| 
    format.html { redirect_to(contents_url) } 
    format.xml { head :ok } 
    end 
end 

我從內容索引中刪除,就像這樣:

<% @contents.each do |content| %> 
    <tr> 
    <td><%= content.name %></td> 
    <td><%= link_to 'Show', content %></td> 
    <td><%= link_to 'Edit', edit_content_path(content) %></td> 
    <td><%= link_to 'Destroy', content, :confirm => 'Are you sure?', :method => :destroy %></td> 
    </tr> 
<% end %> 
</table> 

回答

4

該URL看起來相同,因爲它是相同的。區別在於request method。您的Rails應用程序知道分開GETPUTDELETE請求 - 即使它們被設置爲相同的URL - 並將請求路由到正確的操作。然而,並非所有的瀏覽器/ Web服務器都支持所有這些方法,所以Rails依靠不引人注意的JavaScript(ujs)來「僞造」一些請求 - 更具體地說,PUTDELETE。因此,您需要包含Rails應用程序捆綁包之一(默認情況下爲Prototype;您可以通過this gem獲得jQuery version)。您可以通過jQuery ujs的README(以及源代碼)瞭解更多信息。

如果您遇到問題,可能是因爲您沒有必要的ujs。這也可能是因爲你沒有在你的html頭文件中包含csrf_meta_tag

2

有幾件事情可以去錯了,但很難在沒有更多關於您擁有什麼以及您獲得哪些錯誤/行爲的信息的情況下縮小範圍。

  1. 你不必rails.js負荷,因此data-method="delete"是不是有發送AJAX後用_method參數設置爲「刪除」的效果。
  2. 您的destroy控制器操作沒有達到您所期望的。
  3. content不是涉及您試圖摧毀的模型實例的局部變量(請注意,如果這是您嘗試銷燬的單數資源,則只使用單數content_path)。您是否正在尋找@content?沒有一些背景很難說。

只是爲了澄清你,method選項是HTTP方法,而不是控制器方法。 HTTP方法沒有destroy; Rails只是使用destroy而不是delete作爲一種「優雅地刪除」。