【问题标题】:"Restful" resources in rails: session[:user_id] = user.id syntax when session is a resource but not a modelrails 中的“Restful”资源:session[:user_id] = user.id 语法,当 session 是资源但不是模型时
【发布时间】:2015-02-19 12:05:00
【问题描述】:

通过 RailsCasts 中的身份验证工作,有 one 我不理解一些完全基本和重要的东西(它是专业的,抱歉 - 你需要订阅才能访问它)。

他使用电子邮件和加密密码 (has_secure_password) 创建了一个用户模型。

然后他创建了一个名为 Sessions 的新控制器,并将其声明为配置中的资源。即

resources :sessions

然后,在会话控制器内部,他定义了这样的 create 方法:

user = find user and authenticate
if user
    session[:user_id] = user.id
else ...

但会话作为模型并不存在。例如,如果我打开控制台并编写

sessions[:user_id] = "hello"

它抛出。有没有人对我遗漏的这个非常基本的概念有解释或链接?

谢谢!

编辑:感谢 Sanfor。错字已修复,也用于标记以及最重要的答案!

【问题讨论】:

  • 经过进一步思考,这里特别令人困惑的是,“会话”与我的 SessionsConroller 无关(代码方面)。 Session 是由 ActionController 维护的。因此,我的谷歌搜索完全被误导了。以防万一这对任何人都有用!

标签: ruby-on-rails rest session authentication


【解决方案1】:

我想您在问题中已将 session 复制为 sessions,对吗?屏幕截图已修改,因此您需要订阅我现在不是的内容,因此无法确认比 cmets 所说的更多。

现在到实际的答案,会话是 Rails 内部对实际会话的内部引用,如 here 所述,因此您看不到为它创建的模型。

【讨论】:

  • 非常感谢。该链接正是我所问的不知道的内容。
  • 嗨@Tony Wright,如果这个或任何答案解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
【解决方案2】:

简单解释:

session 只是一个散列并存储为 cookie。 (除非您特别指示 Rails 将其存储在数据库中)。模型通常基于 ActiveRecord 并具有一些行为。

你可以简单地添加它

  session[:some_thing] = "Info for session"
  session[:store_this_too] = "Some other info to track for this session"

session 哈希是由控制器相关的类/模块创建的,rails console 不会加载它们。因此,它在控制台中不可用。

这是一个漂亮的old Railscasts,它解释了更多。 this 采用基于模型的方法。请记住,它们来自过去。

【讨论】:

  • 谢谢 roob。这是一个清晰简洁的解释。我不知道控制台。真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多