如何使用 Rails 3 cookie 和助手?

发布于 2024-11-03 10:57:21 字数 1027 浏览 1 评论 0原文

我创建了一个用户并将 id 存储在永久 cookie 中:

def save_user_id_cookie
  cookies.permanent.signed[:user_id] = @user_id
end

这是一个 链接

然后尝试访问它:

helper_method :current_user

private
def current_user
  @current_user = @current_user || User.find(cookies.signed[:user_id])
end

这是一个 链接

我在我的机器上看到了 cookie,但是当我尝试加载主页时,我得到:

Couldn't find User without an ID

app/controllers/application_controller.rb:8:in `current_user'

控制器是 此处

I created a user and stored the id in a permanent cookie:

def save_user_id_cookie
  cookies.permanent.signed[:user_id] = @user_id
end

Here is a link.

and then try to access it:

helper_method :current_user

private
def current_user
  @current_user = @current_user || User.find(cookies.signed[:user_id])
end

Here is a link.

I see the cookie on my machine but when I try to load the homepage I get:

Couldn't find User without an ID

app/controllers/application_controller.rb:8:in `current_user'

The controller is here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

烂柯人 2024-11-10 10:57:21

相信这一行

@current_user = @current_user || User.find(cookies.signed[:user_id])

应该是

@current_user = @current_user || User.find(cookies[:user_id])

*旁注:对于更少的代码,您可以尝试分配像

@current_user ||= User.find(cookies[:user_id])

Believe this line

@current_user = @current_user || User.find(cookies.signed[:user_id])

should be

@current_user = @current_user || User.find(cookies[:user_id])

*side note: for little less code you can try assigning like

@current_user ||= User.find(cookies[:user_id])
韬韬不绝 2024-11-10 10:57:21

在您的 save_user_id_cookie 中:

def save_user_id_cookie
    cookies.permanent.signed[:user_id] = @user_id # may be @user.id?
    puts 'saved cookie'
end

@user_id 为零。我认为你应该使用 @user.id 代替。

In your save_user_id_cookie:

def save_user_id_cookie
    cookies.permanent.signed[:user_id] = @user_id # may be @user.id?
    puts 'saved cookie'
end

@user_id is nil. I think you should use @user.id instead.

甚是思念 2024-11-10 10:57:21

试试这个:

@current_user = @current_user || User.find(*cookies.signed[:user_id])

注意 cookies 前面的 *。

是的,正如 @nash 指出的那样,user_id 实际上应该是 user.id
我没有费心去寻找错误,正如你所说,你可以在你的机器上看到cookie。

Try this:

@current_user = @current_user || User.find(*cookies.signed[:user_id])

Notice the * before the cookies.

and yes, as @nash pointed out, that user_id should be actually user.id.
I didn't bother to look there for errors, as you said that you could see the cookie on your machine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文