这是我的 session Controller 。我在this question中改了一行代码我只是有点不确定为什么会这样。
我研究了类的定义并做了很多研究,试图找出为什么 unless user.present?
不是大写 U。例如 unless User.present?
如果它属于 User 类,那么它应该是要在数据库中搜索的 User,就像 User.find_by
一样。
rails 是否首先查看读取用户为用户的数据库,小写。
我这样说是因为它前面的代码行也使用 user = User.from_omniauth(env["omniauth.auth"])
并且 User 也是大写的,那么rails如何区分两行代码都是 User 类?
def create
user = User.from_omniauth(env["omniauth.auth"])
unless user.present?
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to user_url(user)
# Log the user in and redirect to the user's show page.
else
# Create an error message.
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
else
log_in user
redirect_to user_url(user)
end
end
最佳答案
当你写的时候:
user = User.from_omniauth(env["omniauth.auth"])
您正在定义一个变量 user
,稍后将在您的 Controller 中使用。
所以,当你写:
unless user.present?
你真的在写:
unless User.from_omniauth(env["omniauth.auth"]).present?
User.from_omniauth(env["omniauth.auth"])
行从数据库中获取用户,将其存储在 user
变量中,并检查是否一个用户在场
此外,在您的 unless
语句中,您定义了一个 user
变量,因此它可以以不同于原始 user
的方式使用第 2 行的变量
在 ruby(和大多数语言)中大写表示不同的意思。例如,如果您有 3 个变量:User
、user
和 USER
,它们都是不同的。 Ruby 可以区分这三者,就像在您的方法中一样。
关于ruby-on-rails - 从数据库获取用户时区分 User 和 rails 中的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40581721/