Rails helper 方法在 controller 和 view 中表现不一样

adventurelw · 2013年05月08日 · 最后由 adventurelw 回复于 2013年05月08日 · 3471 次阅读

在 SessionsHelper 中定义了 current_user 和 current_user=(user) 方法 include 到 controller 中,表现正常 但在 view 中 current_user 就变成 nil 了。。。。。。 由于这是登陆认证方法,所以在本地保存了 cookies 信息的 def current_user @current_user ||= User.find_by_xxx end 方式来获取 controller action 中已经生成的 current_user,为啥在 view 中就不能用了呢? 百思不得其解,请教。。。。。。

给的代码太少了,判断不了。

一般 Controller 和 View 共用的 helper 我会写在 Controller 里,然后用 helper_method 方法共用到 View 里。在 Controller include Helper 我不清楚会产生什么奇怪的问题。

昨晚写的时候已经凌晨 1 点多了,自己也有点糊涂 其实主要就是有个 sign_in helper, SessionsController#create里面会调用这个sign_in(user)

def sign_in(user)
    cookies.permanent([:remember_token]) = user.remember_token
    self.current_user = user
end

其实就是 railstutorials 里面的代码/。。。。。。。 从前后来看,我自己出的问题就是 cookies[:remember_token] 看起来其实没有保存下来有效值,导致 view 中使用 helper current_user 时@current_user本身是 nil, User.find_by..也无效。。。。。在 controller 中由于是使用 sign_in 给 current_user 赋值,所以会有效。 所以现在大概就是 cookies 应该可以直接用吧,为啥保存不了了值呢?

惭愧,是自己写错了代码,有个地方多了一个字母。 不知道这种错误该怎么测试比较好。。。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号