加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 当你可以使用“=”(来自Hartl的教程)时,为什么

发布时间:2020-12-17 02:37:45 所属栏目:百科 来源:网络整理
导读:我很难理解所需的赋值函数,正如Hartl教程的 chapter 8.2.3中所解释的那样. 作为上下文,他专注于以下sign_in函数的第二行: def sign_in(user) cookies.permanent[:remember_token] = user.remember_token self.current_user = user #-- this line end 在他提
我很难理解所需的赋值函数,正如Hartl教程的 chapter 8.2.3中所解释的那样.

作为上下文,他专注于以下sign_in函数的第二行:

def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user #<-- this line
  end

在他提到的地方,因为它的作业,必须另外定义为

def current_user=(user)
    @current_user = user
end

方法current_user =明确设计用于处理对current_user的赋值.我的困惑是:

>为什么这甚至是必要的?我认为一个简单的=会允许你分配东西.例如user.email = hello@kitty.com
>此外,当最终他将代码redirect_to current_user时,属于SessionsController的内容如何被转换为UsersController控制的视图?

谢谢!!

解决方法

原因是需要避免在方法调用和变量赋值之间产生混淆(对于解释器/ VM)

def foo
  # Two completely different things!
  bar = "baz" # assigns baz to local variable bar
  self.bar = "baz" # invokes the bar= method with parameter of baz
end

发生了什么事情,他正在做两件事,首先用用户对象调用current_user =方法,然后将其设置为@current_user(这不是一个很好的例子 – 你可能最终会在现实生活中做更多事情,如果你要制作一个current_user =方法,比如设置会话变量).

其次redirect_to current_user相当于redirect_to user_path(current_user) – 请查看http://api.rubyonrails.org/classes/ActionController/Redirecting.html以获取更多详细信息,这些内容解释了redirect_to可以采用的不同参数类型.请注意,这是一个重定向,而不是渲染 – 所以这里发生了第二个HTTP请求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读