@m和应用程序助手的范围

时间:2012-06-03 05:38:19

标签: ruby-on-rails session

我对这样做的目的感到有些困惑:

module SessionsHelper
   def current_user=(user)
       @current_user = user
   end
end

来源:http://ruby.railstutorial.org/chapters/sign-in-sign-out#code:current_user_equals

因为我们通过控制器设置了@user,它具有控制器和视图之间的范围,所以为什么我们需要明确定义它呢?

此外,解释允许:

redirect_to current_user

函数current_user如何,当我说redirect_to(函数)我在谈论@variable_path时知道什么? (在本例中为user_path)

2 个答案:

答案 0 :(得分:0)

Rails非常聪明,知道current_user背后有User个对象。

也就是说,Rails可以重定向到正确的位置。

答案 1 :(得分:0)

超过90%的铁路开发人员都知道(我们可以说它现在已成为Rails Convention Over Configuration的一部分)

  • current_user表示用户对象
  • current_user表示的不是任何用户,而是代表登录的用户

当您查看rails代码并找到@user时,您需要阅读@user定义的几行,以了解它的定义,以及它的用途。这与current_user不同,因为它代表登录用户。

关于你的第二个问题,

  redirect_to some_object # or any function that returns some object

当您将任何对象传递给redirect_to时,会对URL进行重定向

  "/#{object.class.name.tableize}/#{object.id}"

假设是一个页面,一个“显示”页面,详细说明了最终用户的对象

object_path或object_url创建相同的URL