从这段代码我有一个SQL检查,如果提供者和uid属性没有在任何寄存器中找到,然后创建一个新的。一切都很好。 但是,当创建一个新的寄存器时,它会检查provider和uid的值。这是怎么发生的?该代码不应仅使用电子邮件,密码和名称属性值创建用户实例吗? 什么是使SQL插入提供程序和uid?where和first_or_create如何工作?
def self.from_omniauth(hash)
where(provider: hash.provider, uid: hash.uid).first_or_create do |user|
user.email = hash.info.email
user.password = Devise.friendly_token[0,20]
user.username = hash.info.name
end
的日志
User Load (25.0ms) SELECT "users".* FROM "users" WHERE "users"."provider" = $1 AND "users"."uid" = $2 ORDER BY "users"."id" ASC LIMIT 1 [["provider", "facebook"], ["uid", "879615942106023"]]
(10.0ms) BEGIN
User Exists (12.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1
SQL (12.7ms) INSERT INTO "users" ("provider", "uid", "email", "encrypted_password", "username", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [["provider", "facebook"], ["uid", "879615942106023"], ["email", "[email protected]"], ["encrypted_password", "$2a$10$z3oK6H1P5Z0It7VliVw1hehF.Mn1kFlvZbru919lDR.IiHb94Ha/u"], ["username", "Vinicius Antonio Bolzani"], ["created_at", "2015-07-20 08:58:04.227271"], ["updated_at", "2015-07-20 08:58:04.227271"]]
(2.4ms) COMMIT
这就是我需要的解释,我没有在文档中找到。谢谢。在4选择你的答案。 – vinibol12