我有以下代码(这不符合我的意愿)
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid) || auth.info.slice(:email)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.email = auth.info.email
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
if user.password = ""
temp_pass = SecureRandom.urlsafe_base64
user.password = temp_pass
user.password_confirmation = temp_pass
end
user.save!
end
端
我想要创建的是一个activerecord where子句,如:
User.where("provider = ? AND uid = ? OR email = ?", "facebook", "1569037127","turt13@example.com")
执行此代码时生成的SQL不包含OR语句或对电子邮件字段的任何引用。
用户加载(0.2ms)SELECT“users”。* FROM“users”WHERE“users”。“provider”='facebook'和“users”。“uid”='100007760885613'ORDDER BY“users”。“ id“ASC LIMIT 1
任何帮助都会很棒......
答案 0 :(得分:0)
这是因为你告诉它要做这个或那个,没有查询和或在。
你为什么不能这样做:
where("provider = ? AND uid = ? OR email = ?", auth["provider"], auth["uid"], auth["info"]["email"])
就像你在下面那样?