这是我不太了解的一句话。
@_current_user ||= session[:current_user_id] && User.find(session[:current_user_id])
如果有一个包含电子邮件字段和密码字段的用户模型User.find
正在寻找什么?即用户模型中没有存储会话字段。
答案 0 :(得分:0)
会话与应用程序中的控制器有关。
会话是一种存储要在多个页面中使用的信息(在变量中)的方法。与cookie不同,信息不会存储在用户计算机上。
会话通常保存为#!/home/sklassen/py/try-pycrontab/env/bin/python
from crontab import CronTab
class CronSet:
def __init__(self):
self._crontab = CronTab()
def add_job(self, min, hour, day, month, job_number):
cmd = "sh /home/pifik/Documents/record_radio.sh"
job = self._crontab.new(cmd, comment='job'+str(job_number))
job.setall(min, hour, day, month, None)
def save(self):
self._crontab.write()
def main():
c = CronSet()
c.add_job(0, 22, 23, 12, 1)
c.add_job(0, 23, 23, 12, 2)
c.save()
if __name__ == '__main__':
main()
# running 'crontab -l' produces the following
# 0 22 23 12 * sh /home/pifik/Documents/record_radio.sh # job1
# 0 23 23 12 * sh /home/pifik/Documents/record_radio.sh # job2
对,并且它们可能会过期。
所以,根据您给出的代码示例:
key: value hash
如果@_current_user ||= session[:current_user_id]
User.find(session[:current_user_id])
为零,则行@_current_user ||= session[:current_user_id]
将@_current_user
设置为会话中current_user_id
的值。
@_current_user
在会话中获得User.find(session[:current_user_id])
的值,该值应为current_user_id
,并且将转到数据库以查找具有该ID的用户。< / p>
因此,id
是User.find(session[:current_user_id])
找到的,而不是id
或email
答案 1 :(得分:0)
@current_user
用作实例变量,以便为当前登录的用户带回User
对象。
@current_user
(至少对Devise
用户这样的用户)的典型用例是在我们的代码基础架构中使用它:
def create
@model = current_user.models.new ...
end
因此,你的问题的答案:
User.find在寻找什么?
...是否正在寻找已登录成员的 User
对象。
我认为您对身份验证系统的工作方式感到困惑。即,一旦您登录(身份验证),应用程序就会设置会话(如Sunny K
所述)以表示正在浏览的用户。
这就是您拥有User.find(session[:current_user_id])
的原因 - 您的身份验证系统(无论是自制程序还是预先打包)已经已经验证了电子邮件&amp;密码。现在它必须跟踪您是哪个用户,这样每次发送请求时,它都可以重建您的current_user
对象。
-
另一个重要因素是HTTP is "stateless" - 意味着每个请求必须是“新的”(IE每次都必须重新创建状态)。
这与某个有状态应用程序(例如游戏)相反,您运行该应用程序的事实允许您在整个会话期间保留其状态。 / p>
因此,当Rails收到来自浏览器的请求时,它不会“记住”你是谁 - 它实际上是一台愚蠢的机器。
如果您想要访问特定于用户的信息,则需要首先验证用户(您拥有),然后授权他们的请求。授权部分取决于您,但为了使其工作,您基本上必须每次都将当前用户ID发送到应用程序。
然后,当您调用程序的实例时,@current_user
对象将可用。这是User.find(session[:current_user_id])
的用途。