在实例变量之前放置一个爆炸 - !@my_var

时间:2015-06-28 11:43:34

标签: ruby-on-rails ruby

代码中的logged_in?方法没有使用@符号来引用current_user实例变量,这是否意味着该变量是{{1}的本地变量方法还是仍然引用logged_in?变量?我注意到,如果我写@current_user而不是!@current_user,则该方法无法正常工作。我有点困惑这是如何工作的,因为如果我在!current_user中有一个名为logged_in?的局部变量,我不希望它引用上面的current_user实例变量。< / p>

@current_user

2 个答案:

答案 0 :(得分:1)

这是一个带有隐式接收器self的消息。如果您查看发布的代码,方法current_user会直接在logged_in?上方定义。

答案 1 :(得分:1)

logged_in?中,您调用的不是实例变量,而是您定义的方法current_user。然后返回User.find_by(id: session[:user_id])的结果。

一些额外的: 因为你在这里使用memoization:||=(&lt; - this thing),该方法将数据库调用的结果存储在你的实例变量中。