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

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 に答える
0

モデルを呼び出しto_sCustomersいて、実際に名前を取得していないためです。持っている 2 つのフェッチ行は次のようになります。

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

ただし、データベースに対して 2 つの別々の要求を行っています。これの目的はわかりませんが (2 人の異なる顧客を選択する可能性があるため)、次のことができます。

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

ただし、名前と電子メールで選択しているため、これらのフィールドがインデックス化されていることを確認することを強くお勧めします。これらのリクエストを含む大きなテーブルはサーバーを動かし、そのルートをかなり遅くするからです (実際には他のルートを追求することをお勧めします)それはより実行可能ですが、私はこれについて言及したいと思いました)。

于 2013-04-21T08:30:52.043 に答える