0

我想从数据库中创建一个简单的检查值。这是我的代码:

def check_user_name(name, email)
db_name = Customers.find_by_name(name).to_s
 db_email = Customers.find_by_email(email).to_s
if name == db_name && email == db_email  
  return 'yes'
 else 
  return 'no'   
end
end

但我总是“不”变种....为什么?

4

2 回答 2

0

因为您正在调用to_s您的Customers模型,但实际上并没有得到名称。您拥有的两条提取线应该是:

Customers.find_by_name(name).name.to_s # to_s probably not necessary if you know this field is a string
Customers.find_by_email(email).email

但是,您正在向数据库发出两个单独的请求。我不知道这样做的目的是什么(因为您可以选择两个不同的客户)但您可以这样做:

if Customers.where(name: name, email: email).exists?
  "yes"
else
  "no"
end

但是,由于您是按姓名和电子邮件进行选择 - 我强烈建议您确保对这些字段进行索引,因为带有这些请求的大型表会使服务器陷入困境并使该路线相当缓慢(我实际上建议您追求其他路线这更可行,但我想提一下)。

于 2013-04-21T08:30:52.043 回答
0

当你给 Customers.find_by_name(name) 时,你不会得到客户的名字。实际上它将返回 activerecord 对象,因此您需要从该对象中获取客户的姓名和电子邮件,如下所示,

name = Customers.find_by_name(name).name
email = Customers.find_by_email(email).email

现在您将从 DB 中获得匹配数据的确切名称和电子邮件。

于 2013-04-21T08:43:36.043 回答