繁体   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