Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从DB表中检查值?_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何从DB表中检查值?

Ruby on rails 如何从DB表中检查值?,ruby-on-rails,Ruby On Rails,我想从数据库中创建一个简单的检查值。这是我的密码: 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 但

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

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

但我总是有“否”的变体……为什么?

因为你打电话给
客户
型号的
而实际上没有得到名称。您拥有的两个提取行应该是:

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

但是,由于您是按名称和电子邮件进行选择的,因此我强烈建议您确保这些字段已编制索引,因为包含这些请求的大型表将阻塞服务器,并使该路由相当缓慢(我实际上建议您采用其他更可行的路由,但我想提及这一点).

当您提供客户时。按名称查找,您将无法获得客户的名称。实际上,它将返回activerecord对象,因此您需要从该对象获取客户的姓名和电子邮件,如下所示

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

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

您好。我很少更改您的代码:
if Customers.where(:name=>name,:email=>email)
现在,我总是有'yes':)应该是
if Customers.where(:name=>name,:email=>email.exists?
@johnogy使用的是Ruby 1.9中的哈希语法,您使用的是旧的哈希语法。两者都是完全可以接受的,应该根据您的喜好使用。但是1.9中的
{name:“A name”}
相当于
{:name=>“A name”}
@Baldrick谢谢,我应该查一下-我假设它的操作类似于可以在if中使用的
创建
/
保存
方法。谢谢