将多个哈希片传递给活动记录查询



我有以下代码(它没有像我想要的那样工作)

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

结束

我正在尝试创建的是一个活动记录,其中子句如下:

User.where("provider = ? AND uid = ? OR email = ?", "facebook",    "1569037127","turt13@example.com")

执行此代码时生成的 SQL 不包括 OR 语句或对电子邮件字段的任何引用。

用户负载(0.2ms) 选择"用户".* 从"用户"到"用户"的位置。提供者"="脸书"和"用户"。uid" = '100007760885613' 按"用户"排序。id" ASC 限制 1

对此的任何帮助都很棒...

这是因为你告诉它做这个或那个,而不是查询和或输入。

为什么你不能这样做:

where("provider = ? AND uid = ? OR email = ?", auth["provider"], auth["uid"], auth["info"]["email"])

和你下面差不多?

最新更新