我試圖在刪除後重定向,具體取決於用戶來自何處。刪除後的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)
感謝所有幫助!
後'return_url =(request.referer.include?('show')?::back)'然後'redirect_to return_url' –
MrYoshiji
2013-05-03 17:08:56
@MrYoshiji幾乎就在那裏,但是這會得到任何'show' URL,不是嗎? – fotanus 2013-05-03 17:10:16
對於嵌套路由,您沒有'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