2011-03-17 69 views
0

我有喜歡命名路由:爲什麼destroy_message_path不起作用?

<a href = '/messages/destroy/<%= @showmessage.id %>'>Delete Message</a> 

我重寫此鏈接到

<%= link_to "Delete Message", destroy_message_path(:id => "1") %> 

在我的路線,我有

map.resources :messages, :collection => { :destroy => :get } 

而且在我的控制器

def destroy 
    @message = Message.find(params[:id]) 
    @message.destroy 
    redirect_to :action => 'index' 
    end 

當我運行該頁面時,出現如下錯誤:

undefined method `destroy_message_path' for #<ActionView::Base:0xb24a24c0> 

如何解決此問題?

回答

1

我不知道,如果你的意思是在這裏對抗Rails慣例,但其容易得多跟他們一起去,所以如果您沒有問題,你可以做到以下幾點:

刪除此從您的路線:

map.resources :messages, :collection => { :destroy => :get } 

將其更改爲:

map.resources :messages 

,並使用該鏈接的格式,而不是:

<%= link_to "Delete Message", message_path(:id => "1"), :method => 'delete' %> 

破壞性操作的URL看起來像/messages/1,但該方法的「方法」部分將使Rails創建一個隱藏表單並對該URL執行模擬的「DELETE」操作。這更加RESTful,並且跟隨Rails期待你做的事情。

+0

非常感謝.. – useranon 2011-03-17 05:36:58

0

有了資源,你不應該做一個GET請求,你應該做這樣一個DELETE請求:

<%= link_to "Delete Message", destroy_message_path(:id => "1"), 
      :confirm => 'Are you sure?', :method => :delete %> 

,並在你的路由文件:

map.resources :messages 

在另一方面,您可以將消息的對象傳遞給destroy_message_path,例如:

<%= link_to "Delete Message", destroy_message_path(@message), 
      :confirm => 'Are you sure?', :method => :delete %>