簡體   English   中英

Rails:rails 應用程序控制器中的條件重定向

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM