4

如第 8.2.3 章所述,我很难理解所需的分配功能。Hartl 的教程。

作为上下文,他专注于以下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. 我的困惑是:

  1. 为什么这甚至是必要的?我认为一个简单的=可以让你分配东西。例如user.email = hello@kitty.com

  2. 此外,当他最终将编码时redirect_to current_user,如何将属于的东西SessionsController翻译成由 控制的视图UsersController

谢谢!!

4

1 回答 1

5

原因是需要避免方法调用和变量赋值之间的混淆(对于解释器/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 请求。

于 2012-12-19T01:27:09.340 回答