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

Ruby on rails @m和应用程序助手的范围,ruby-on-rails,session,Ruby On Rails,Session,我对这样做的目的有点困惑: module SessionsHelper def current_user=(user) @current_user = user end end 资料来源: 因为通过我们的控制器我们设置了@user,它在控制器和视图之间有一个作用域,所以为什么我们需要显式地定义它呢 此外,该解释还考虑到: redirect_to current_user 当我说重定向到(函数)时,函数当前用户如何知道我说的@variable\u path?(在本例中

我对这样做的目的有点困惑:

module SessionsHelper
   def current_user=(user)
       @current_user = user
   end
end
资料来源:

因为通过我们的控制器我们设置了@user,它在控制器和视图之间有一个作用域,所以为什么我们需要显式地定义它呢

此外,该解释还考虑到:

redirect_to current_user

当我说重定向到(函数)时,函数当前用户如何知道我说的@variable\u path?(在本例中为user\u path)

Rails足够聪明,可以知道
当前用户
后面有一个
用户
对象


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

超过90%的Rails开发人员都知道这一点(我们可以说,这已经成为Rails惯例的一部分,而不是配置)

  • 当前用户表示用户对象
  • 当前用户并不代表任何用户,而是一个登录的用户
当您查看rails代码,并找到@user时,您需要阅读定义@user的几行代码,以了解定义它的原因,以及它的用途。当前用户不是这种情况,因为它代表登录的用户

关于你的第二个问题

  redirect_to some_object # or any function that returns some object
当您传递任何要重定向到的对象时,url会发生重定向

  "/#{object.class.name.tableize}/#{object.id}"
它假设是一个页面,一个“显示”页面,向最终用户详细说明对象


object\u path或object\u url创建相同的url

我建议,避免使用object\u path或object\u url这样的url帮助程序来简单地生成url字符串,原因是,它们非常昂贵,占用了很多时间。IMO简单的URL在其他方面看起来也更可读。所以使用当前用户只是为了可读性,与范围和/或控制流问题无关?另外,对象路径的替代方案是什么?是的,它与范围、控制等无关。只是ror开发人员很久以前就开始使用它,现在每个人都遵循它。除了object_路径之外,我会说它是“/objects/#{object.id}”。尽管如此,大多数ror开发人员还是会鼓励您坚持使用object_路径,不幸的是,我无法指出这里发生的任何相关讨论w.r.t.it。但我看到专家们仍然强调使用object_path,因为我们这里的大多数人认为它更具可读性。