2013-07-08 66 views
3

Rails的重定向後銷燬

def destroy 
    Event.find(params[:id]).destroy 
    flash[:info] = "Event deleted" 
    redirect_to :back 
end 

,我能夠從2層不同的觀點刪除項目。在一個視圖中它是一個項目列表,所以我可以使用:back並重新加載相同的頁面。但另一個刪除是刪除項目的視圖,所以一旦它消失了,我想redirect_to在不同的地方。

我的問題是我如何告訴Rails一個不同的redirect_to路徑取決於destroy方法來自哪裏?

就像一個測試,我嘗試使用基於html中的body類的if語句,但實例變量沒有帶入destroy方法(我假設),因爲它不起作用。例如

def destroy 
    if @body_class == 'one page' 
     Event.find(params[:id]).destroy 
    flash[:info] = "Event deleted" 
     redirect_to :back 
    elsif @body_class == 'a different page' 
     Event.find(params[:id]).destroy 
     flash[:info] = "Event deleted" 
     redirect_to root_path 
    end 
end 

回答

6

通過與銷燬鏈接params。如果鏈接列表上,像這樣:

<%= link_to 'destroy', event_path(event, :from=>"list"), :method=>:delete %> 

如果對象頁:

<%= link_to 'destroy', event_path(event), :method=>:delete %> 

並在控制器:

def destroy 
    Event.find(params[:id]).destroy 
    flash[:info] = "Event deleted" 
    if params[:from]=='list' 
    redirect_to :back 
    else 
    redirect_to root_url 
end 
+0

完美 - 感謝您的幫助。明白了! – matski