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中使用的创建
/保存
方法。谢谢