2012-03-14 42 views
1

到目前爲止,我已經設法想出這段代碼:如何創建一個鏈接來刪除Rails中的動作(使用路徑和link_to)?

1 <% @projects.each do |p| %> 
    2  <%= link_to p.name, project_path(p) %> 
    3  <%= link_to "edit", edit_project_path(p) %> 
    4  <%= link_to "delete", project_path(p), :method => :delete %> 
    5 <% end %> 

當我點擊「刪除」鏈接就帶我到destroy.html.erb,不delete.html.erb。它還與控制器的「銷燬」操作進行通信,而不是與「刪除」操作進行通信。另外,URL看起來像這個/ projects/1(no/delete或/ destroy)。這裏有什麼問題?這是創建刪除鏈接的最佳方式嗎?

+0

請,你能你的路由配置添加到這個問題? – jeffersongirao 2012-03-14 22:44:37

+0

我只有2行。 資源:項目(和)資源:用戶 – oFca 2012-03-14 22:53:10

回答

2

這是Rails的正確行爲。 :delete方法鏈接到destroy操作並且不向URL添加任何內容 - 正確的操作由HTTP動詞連接。有關Rails路由結構和默認值的更多信息,請查看the Rails routing guide

+0

好的,謝謝。那麼你能告訴我們刪除鏈接的樣子嗎? – oFca 2012-03-14 22:51:37

+2

該語法是正確的。閱讀我指導的鏈接,瞭解如何實現它。 – Veraticus 2012-03-14 22:52:10

1

Veraticus是絕對正確的。 Rails正在做它應該做的事情。

但是,如果你真的想想要去一個刪除頁面(而不是一個JavaScript確認)比你當然可以做到這一點。

舉例來說,如果我有一個「頁數」控制器,比我能同時擁有「刪除」和這樣的「破壞」作用:

def delete 
    @page = Page.find(params[:id]) 
    render 'delete' 
    end 

    def destroy 
    page = Page.find(params[:id])   
    page.destroy 
    flash[:notice] = "Page successfully destroyed" 
    redirect_to(:action => 'index') 
    end 

而且裏面的網頁索引視圖,你會需要一個經過page.id鏈接到刪除方法:

<%= link_to "delete",{ :action => 'delete', :id => @page.id } %> 

,當然,你需要在你的意見,以便文件夾給它的東西來渲染創建「刪除」視圖。

裏面的「delete.html.erb」文件,你需要一個發送破壞作用的一種形式:

<%= form_for(:page, :url => {:action => 'destroy', :id => @page.id }) do |f| %> 
    < All your form components and submit tag will go here > 
<% end %> 
+0

這正是我想要的。但是這會返回路由錯誤>>>沒有路由匹配[GET]「/ assets」 – oFca 2012-03-14 23:36:33

+0

沒有看到您的路由,控制器和視圖,它將很難排除故障。你能否將你的代碼示例放在要點中並將它們鏈接到你的問題上? – PhillipKregg 2012-03-15 00:30:03

+0

我在https://gist.github.com/2040730的要點中列舉了一些例子。感謝你們對我的幫助。如果你需要別的東西來解決這個問題,請告訴我。 – oFca 2012-03-15 00:45:21

相關問題