2013-04-21 30 views
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 

但我總是'不'變種....爲什麼?

回答

0

因爲您打電話給Customers模型to_s,實際上並沒有得到名稱。您擁有的兩條抓取線應該是:

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 

既然你,但是,姓名和電子郵件選擇 - 我會強烈建議你要確保這些字段是被索引的,因爲有這些請求的大表會讓服務器陷入泥潭,並且使得這條路線相當緩慢(我實際上建議你去追求其他更可行的路線,但我想提一提)。

+0

你好。如果Customers.where(:name => name,:email => email)' now,i allways have'yes':) – 2013-04-21 08:42:19

+2

如果Customers.where(:name = > name,:email => email).exists?' – Baldrick 2013-04-21 08:47:48

+0

哦,是)謝謝) – 2013-04-21 08:50:02

0

當您給Customers.find_by_name(姓名)時,您將無法獲得客戶的姓名。實際上,它會返回ActiveRecord的對象,所以從這個對象,你需要得到客戶的姓名和電子郵件,如下圖所示,

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

現在,您將得到確切的名稱,並從數據庫匹配數據的電子郵件。