将多个哈希切片传递给Activerecord查询

时间:2014-02-24 11:34:29

标签: ruby-on-rails ruby activerecord

我有以下代码(这不符合我的意愿)

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

  

任何帮助都会很棒......

1 个答案:

答案 0 :(得分:0)

这是因为你告诉它要做这个或那个,没有查询和或在。

你为什么不能这样做:

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

就像你在下面那样?