gpt4 book ai didi

ruby-on-rails - 从数据库获取用户时区分 User 和 rails 中的用户

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:24 24 4
gpt4 key购买 nike

这是我的 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 个变量:UseruserUSER,它们都是不同的。 Ruby 可以区分这三者,就像在您的方法中一样。

关于ruby-on-rails - 从数据库获取用户时区分 User 和 rails 中的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40581721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com