2010-02-04 19 views
0

我想在查看Ruby on Rails項目中查看對象的頁面上具有「刪除」鏈接。我遇到的問題「link_to:method =>:delete」在查看對象的頁面上

<%= link_to "Delete", @member, :confirm => 'Are you sure?', :method => :delete %> 

加載頁面它是,當方法運行,從而嘗試加載一個不存在的對象。我想返回到索引頁面,一旦對象被刪除。

任何想法?

+0

一般而言,您不應該使用鏈接來修改記錄,因爲如果網絡蜘蛛或意外的事情進入您的網站可能會發生壞事。 – 2010-02-04 18:23:55

+1

我認爲這是可以的,因爲腳手架上有<%= link_to'Destroy',member,:confirm =>'你確定嗎?',:method =>:delete%>「。你有什麼建議? – 2010-02-04 18:32:56

+1

回覆:Mike Buckbee:或者至少確保刪除鏈接僅供授權用戶使用。 – EmFi 2010-02-04 18:33:08

回答

2

問題在於你的控制器。

確保銷燬操作重定向到索引,你應該沒問題。

如果您使用腳手架來生成控制器,應該已經爲您完成了。 例子:

class MembersController < ApplicationController 
    ... 

    def destroy 
    @member = Member.find(params[:id]) 
    @member.destroy 
    respond_to do |format| 
     format.html{ redirect_to members_url} 
     format.xml { head :ok} 
    end 
    end 
end 
1

在我的項目,我傾向於創造我的控制器,找到對象before_filter,如果它不存在,它會自動將錯誤消息重定向到一個默認的索引網址,像這樣:

def find_object 
    @object = Object.find(params[:id]) 
rescue ActiveRecord::RecordNotFound => e 
    flash[:error] = "Sorry, that object was not found. Please try again." 
    redirect_to objects_path 
end 

你仍然需要有一個重定向的對象是在控制器後銷燬,但至少這從用戶節省了意外試圖刪除不存在/視圖對象,拋出異常。

+0

這是一個很好的做法,只要確保在啓動過濾器時只使用sensible/except選項。 – EmFi 2010-02-04 20:49:03