0

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

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 (function) 我在谈论 @variable_path ?(在本例中为 user_path)

4

2 回答 2

0

Rails 足够聪明,可以知道背后current_user有一个对象。User

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

于 2012-06-03T05:53:04.083 回答
0

超过 90% 的 Rails 开发人员都知道(我们可以说它现在已成为 Rails 约定优于配置的一部分)

  • 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

于 2012-06-03T06:05:48.107 回答