代码中的logged_in?
方法没有使用@
符号来引用current_user
实例变量,这是否意味着该变量是{{1}的本地变量方法还是仍然引用logged_in?
变量?我注意到,如果我写@current_user
而不是!@current_user
,则该方法无法正常工作。我有点困惑这是如何工作的,因为如果我在!current_user
中有一个名为logged_in?
的局部变量,我不希望它引用上面的current_user
实例变量。< / p>
@current_user
答案 0 :(得分:1)
这是一个带有隐式接收器self
的消息。如果您查看发布的代码,方法current_user
会直接在logged_in?
上方定义。
答案 1 :(得分:1)
在logged_in?
中,您调用的不是实例变量,而是您定义的方法current_user
。然后返回User.find_by(id: session[:user_id])
的结果。
一些额外的:
因为你在这里使用memoization:||=
(&lt; - this thing),该方法将数据库调用的结果存储在你的实例变量中。