2013-05-03 55 views
1

我試圖在刪除後重定向,具體取決於用戶來自何處。刪除後的Rails條件重定向

這是當前的代碼在事件控制器:

def destroy 
    @event = Event.find(params[:id]) 
    @event.destroy 

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

我改成了這個(感謝MrYoshiji):

format.html { redirect_to :back } 

這工作,如果用戶從除了所有頁面刪除活動顯示頁面。因爲您在嘗試顯示剛剛刪除的記錄時出現錯誤。

所以,我試圖用一個參數告訴破壞代碼重定向到哪裏。

我想這一點:

def destroy 
    @event = Event.find(params[:id]) 
    @event.destroy 
    @return_url 

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

但是,我不知道如何@return_url傳遞作爲一個展示頁面上的link_to設置了一個param。

<%= link_to 'Delete', @event, params(@return_url => "some url"), confirm: 'Are you sure?', method: :delete, :class => 'btn btn-danger' %> 

如何將網址作爲參數傳遞?

謝謝!

UPDATE1

我改變了事件控制器這樣:

def destroy 
    @expense = Expense.find(params[:id]) 
    redirect_url = (request.referer.include?("#{@event.id}/show") ? events_url : :back) 
    @expense.destroy 

    respond_to do |format| 
    format.html { redirect_to redirect_url } 
    format.json { head :ok } 
    end 
end 

這重定向到正確的頁面中的「刪除事件」按鈕上 - 除了當我點擊顯示網頁上的按鈕爲事件。

重定向想要顯示已刪除的記錄。

UDPATE2

確定這個工作對我的應用程序:

redirect_url = (request.referer.include?("/events/#{@event.id}") ? events_url : :back) 

感謝所有幫助!

+0

後'return_url =(request.referer.include?('show')?::back)'然後'redirect_to return_url' – MrYoshiji 2013-05-03 17:08:56

+0

@MrYoshiji幾乎就在那裏,但是這會得到任何'show' URL,不是嗎? – fotanus 2013-05-03 17:10:16

+0

對於嵌套路由,您沒有'show'關鍵字,例如我的一個深層嵌套路由:'http://127.0.0.1:3000/settings/organizations/1/clinics/1/edit'但是你是對,它應該是'include?(「#{@ current_resource.id}/show」)' – MrYoshiji 2013-05-03 17:12:20

回答

5

正如我評論,你可以做到以下幾點:

def destroy 
    @event = Event.find(params[:id]) 
    @event.destroy 
    redirect_url = (request.referer.include?("#{@event.id}/show") ? events_url : :back) 

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

(我不知道如果沒有可以訪問@event.id您刪除後馬上,摧毀它,我們設置redirect_url

+0

感謝您的幫助!在問題中查看我的UPDATE1。 – Reddirt 2013-05-03 18:37:15

+0

我很難理解redirect_url語句在做什麼。是否測試瞭解最後一頁是否是活動/展示頁面?顯示頁面有這個網址'http:// localhost:5000/events/29' – Reddirt 2013-05-03 18:44:14

+1

它應該是什麼樣的(「events/#{@event.id}」) – Reddirt 2013-05-03 18:51:25

0

在你看來:

<%= link_to 'Delete', event_path(@event, url), confirm: 'Are you sure?', method: :delete, :class => 'btn btn-danger' %> 

在這裏,我傳遞url變量作爲參數傳遞給控制器​​。

在控制器:

... 
@return_url = params[:url] 
... 

希望這有助於!

+1

從視圖中傳遞原始URL是不好的。 – drhenner 2013-05-03 17:18:25

+0

遞增drhenner評論,它可以用於探索漏洞 – fotanus 2013-05-03 17:19:06

+0

謝謝,我現在沒有。我只是回答說:「但是,我不知道如何在顯示頁面的link_to中將@return_url作爲參數傳遞給參數。」 – cortex 2013-05-03 17:25:22