簡體   English   中英

在Ruby on Rails中,如何將控制權傳遞給另一個控制器中的操作?

[英]In Ruby on Rails, how do I pass control to an action in another controller?

我找到了幾個引用來描述renderredirect_to之間的區別,但沒有一個讓我知道如何做我想要的,即直接將控件(在同一個請求中,因此沒有redirect_to )傳遞給另一個控制器中的一個動作。

基本上,我想修復我用於處理登錄和會話的示例代碼中的錯誤。 如果我登錄,但稍后再執行rake db:seed ,則會更改用戶的所有ID,並且我的登錄會話將變為無效。 當我嘗試獲取當前用戶時,這會導致引發令人討厭的異常,具有:

@current_user ||= Reviewer.find(session[:reviewer_id])

所以要修復它,我想檢查一下我的“before_filter”, ensure_login 像這樣的東西(但這不起作用):

unless Reviewer.where(id: session[:reviewer_id]).first
  render :action => 'sessions/destroy'
end

這會嘗試渲染與sessions/destroy相關聯的模板 ,但當然沒有一個。 我認為解決方案必須非常簡單,但我被困住了。

解決方案不是實例化另一個控制器並在其上調用操作(組織不良和開銷太大),而是將要調用的代碼放在一些常用的位置,如助手或lib文件,例如:

# in a controller
unless ...
  render_session_destroy
end

# in a relevant helper
def render_session_destroy
   ...
end

然后可以從其原始控制器調用render_session_destroy

使用redirect_to

例如

redirect_to '/SignOut'

在像這樣的路線

  resources :user_sessions
  match '/SignOut', to: 'user_sessions#destroy'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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