[英]Rails: Conditional redirect in rails app controller
我在控制器中有一個動作,我從兩個不同的視圖調用。 在每種情況下,我都希望操作重定向回單擊鏈接的頁面。 目前我正在這樣做......
在這個視圖中,我傳遞了一個這樣的參數......
%a.showtooltip#wprofile{:href => idea_vote_up_path(@idea, :source => 'idea'), :title => 'Awesome idea - vote up !', }
並在控制器中...
if params[:source] == 'idea'
redirect_to idea
else
redirect_to ideas_path
end
這工作正常,但感覺不優雅,尤其是當它最終出現在幾個動作中時。 有沒有更好的辦法?
您可以通過以下方式重寫它:
redirect_to params[:source] == 'idea' ? idea : ideas_path
如果要重定向回頁面(刷新當前頁面)
redirect_to request.referer
像這樣將引用存儲在會話中session[:previous] ||= request.referer
並將其用作redirect_to session.delete(:previous)
我發現一個很好的方法是使用您希望作為返回 url 的值隱藏輸入。 似乎是一個易於管理的解決方案,對我有用。 通過這種方式,您可以在 1 或 1000 個視圖中創建隱藏輸入,並在控制器中使用一行代碼來執行重定向。 我無法立即想到這種方法的缺點是什么。
通知
hidden_field_tag(:redirect_to, params[:redirect_to]) # in the form that is to be submitted, value determined by a query string
hidden_field_tag(:redirect_to, "/a/direct/value") # in the form, value specified directly
在控制器中
redirect_to params[:redirect_to].presence || idea_path(@idea)
沒有測試代碼,也不太了解 ruby sups,所以請仔細檢查,但邏輯應該成立。 “.presence”處理您不希望自定義重定向到且沒有隱藏輸入指定的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.