2013-10-01 99 views
1

如果我有一個支持軟刪除(對於標準用戶)和硬刪除(對於管理員)的模型,最好的最佳路由方法是什麼?Rails軟和硬刪除操作

在控制器中使用方法中的邏輯處理同一刪除操作下的請求是否有意義,或者是否有必要使用不同的路由?

是一個軟刪除技術上認爲是delete操作?

我知道這是過度複雜,但任何意見將不勝感激。

回答

2

我可能會把一個條件語句放在一個單獨的動作中。這樣,它是對用戶透明,而且也沒有辦法,用戶可以通過猜測刪除URL和張貼到它破解破壞方法:

# DELETE /thing/1 
# DELETE /thing/1.json 
def destroy 
    @thing = Thing.find(params[:id]) 

    if current_user.admin? and !params[:soft_delete] 
    @thing.destroy 
    else 
    @thing.soft_delete 
    end 

    respond_to do |format| 
    format.html { redirect_to things_url } 
    format.json { head :no_content } 
    end 
end 

# views/things/show.html.erb 
<%= button_to("Delete", thing_url(@thing), method: :delete) %> 
<%= button_to("Soft Delete", thing_url(@thing, soft_delete: true), method: :delete) %> 
+0

我喜歡這個,但如果管理員需要選擇做一個軟和硬刪除呢? – DrMavenRebe

+1

你可以'如果current_user.admin?和!params [:soft_delete]'。然後在你的視圖中,你可以有一個像'<%= button_to(「Soft Delete」,thing_url(@thing,soft_delete:true),method :: delete)%>'這樣可以傳遞'soft_delete'參數的按鈕。 – mysmallidea

0

除非管理員可能需要執行一個軟刪除,使用相同的路線因爲這兩項行動都會減少要處理的路線數量。

對兩種操作都使用DELETE操作即可。從客戶的角度來看,它只是刪除了一些東西(不需要知道它是軟的還是硬的)。