我发现一些参考文献描述之间的区别render和redirect_to,但没有一样让我知道该怎么做我想要的东西,这是直接将控制权(这同一个请求中,所以没有redirect_to)到另一个控制器的操作.
基本上,我想修复我用于处理登录和会话的示例代码中的错误.如果我登录,但稍后再进行操作rake db:seed,则会更改用户的所有ID,并且我的登录会话将变为无效.当我尝试获取当前用户时,这会导致引发令人讨厌的异常,具有:
@current_user ||= Reviewer.find(session[:reviewer_id])
Run Code Online (Sandbox Code Playgroud)
因此,要解决这个问题,我想提出一个检查在我的"的before_filter" ensure_login.像这样的东西(但这不起作用):
unless Reviewer.where(id: session[:reviewer_id]).first
render :action => 'sessions/destroy'
end
Run Code Online (Sandbox Code Playgroud)
这会尝试渲染与之关联的模板sessions/destroy,但当然没有一个.我认为解决方案必须非常简单,但我被困住了.
解决方案不是实例化另一个控制器并在其上调用操作(组织不良和开销太大),而是将要调用的代码放在一些常用的位置,如助手或lib文件,例如:
# in a controller
unless ...
render_session_destroy
end
# in a relevant helper
def render_session_destroy
...
end
Run Code Online (Sandbox Code Playgroud)
然后render_session_destroy可以也可以从原来的控制器调用.
| 归档时间: |
|
| 查看次数: |
426 次 |
| 最近记录: |