das*_*ist 4 ruby ruby-on-rails railstutorial.org
我很难理解所需的赋值函数,如第8.2.3章所述.Hartl的教程.
作为上下文,他专注于以下sign_in功能的第二行:
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user #<-- this line
end
Run Code Online (Sandbox Code Playgroud)
在他提到的地方,因为它的作业,必须另外定义为
def current_user=(user)
@current_user = user
end
Run Code Online (Sandbox Code Playgroud)
凡法current_user=明确设计成处理分配到current_user.我的困惑是:
为什么这甚至是必要的?我认为一个简单的=东西可以让你分配东西.例如user.email = hello@kitty.com
此外,当最终他将编码时redirect_to current_user,属于SessionsControllerget的东西如何被转换为由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
Run Code Online (Sandbox Code Playgroud)
发生了什么事情,他正在做两件事,首先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请求.
| 归档时间: |
|
| 查看次数: |
535 次 |
| 最近记录: |