ruby-on-rails - 谁能告诉我 Rails 中这两种变量赋值方法的区别?

标签 ruby-on-rails ruby cookies

我正在阅读 Michael Hartl 的 Rails 教程一书,我发现这个变量赋值语句:cookies.permanent[:remember_token] = remember_token 不同于这个变量赋值语句:remember_token = cookies .permanent[:remember_token]。这些行取自下面用于将用户登录到 Web 应用程序的此函数。

def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    self.current_user = user
end

这里有一些额外的代码可以帮助您理解这里发生了什么。

def signed_in?
  !current_user.nil?
end

def sign_out
  self.current_user = nil
  cookies.delete(:remember_token)
end

def current_user=(user)
  @current_user = user
end

def current_user
  remember_token = User.encrypt(cookies[:remember_token])
  @current_user ||= User.find_by(remember_token: remember_token)
end

sign_in(user) 写成这样时:cookies.permanent[:remember_token] = remember_token 当我点击标志时,网络应用程序允许我退出out 链接,但是当像这样从左侧分配变量时:remember_token = cookies.permanent[:remember_token],我根本无法注销。谁能告诉我 Rails 如何解释这两个不同的赋值语句?

任何帮助将不胜感激!谢谢!

最佳答案

Rails 没有什么特别之处。如果您对某些编程语言知之甚少,您应该注意到:

foo = bar

表示将bar的计算值赋给一个名为foo的变量。这不同于

bar = foo

这意味着将计算出的foo值赋给一个名为bar的变量。

编程初学者经常将此 = 混淆为赋值,而 = 则为数学中使用的等式。但是在编程中,相等是==,而不是=


在你的问题中,

cookies.permanent[:remember_token] = remember_token

甚至不同于变量赋值。假设 cookies.permanent 是一个散列,它将值 remember_token 分配给该散列中的键 :remember_token

remember_token = cookies.permanent[:remember_token]

另一方面,将 cookies.permanent[:remember_token] 分配给名为 remember_token 的变量。

关于ruby-on-rails - 谁能告诉我 Rails 中这两种变量赋值方法的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20020255/

相关文章:

javascript - rails : How to use minimised versions of css and js files in production and full versions in development?

ruby-on-rails - 将参数传递给 Rails 中的自定义 RESTful 路由(使用 :collection)

ruby-on-rails - ruby rails : Calling class method from concern

javascript - 设置 cookie 不适用于 Javascript 或 jQuery

session - 使用 ColdFusion 创建持久登录系统

ruby-on-rails - Rails 范围/类方法来选择存在关联的项目

ruby-on-rails - 使用 Rails 进行 Postgres 全文搜索的单词分隔符

ruby - 如何在 ruby​​ 中替换数组中的单个元素?

javascript - 如何拖放表格?

javascript - 根据用户访问网站的方式(cookie)以不同方式显示网站内容?