2

これは私が見落としている単純なことだと確信していますが、この奇妙な問題に数日間取り組んでいるので、助けを求めています.

ここに私のアプリのセットアップと問題があります:

pg gem と次の db スキームを使用する Rails 3.2.13 アプリ:

create_table "clients", :force => true do |t|
  t.string   "uuid"
  t.string   "private_key"
  t.datetime "created_at",  :null => false
  t.datetime "updated_at",  :null => false
end

add_index "clients", ["private_key"], :name => "index_clients_on_private_key"
add_index "clients", ["uuid"], :name => "index_clients_on_uuid"

現在、「クライアント」データベースには 2 つの行があります。彼らは以下の写真を撮りました:

ここに画像の説明を入力

問題

単純な「SELECT * FROM client;」を実行すると、RubyMine データベース コンソールを使用すると、上のスクリーン ショットに示されている行が表示されます。「SELECT * FROM client WHERE id = 11;」を実行すると、私はその行を取得します、すべてが順調です。ただし、問題は、「SELECT * FROM clients WHERE private_key = "MkRBNUZBQzUtMzVDRi00NzQ3LThFNjEtNjI4OThERUQzQkRF";」を実行しようとしたときです。失敗し、コンソール出力に次のように表示されます...

sql> SELECT * FROM clients WHERE private_key = "MkRBNUZBQzUtMzVDRi00NzQ3LThFNjEtNjI4OThERUQzQkRF"
[2013-04-17 20:09:51] [42703] ERROR: column "MkRBNUZBQzUtMzVDRi00NzQ3LThFNjEtNjI4OThERUQzQkRF" does not exist
  Position: 43

また、アクティブ レコード ヘルパー メソッドを利用して、この行をデータベースから引き出してみました...

Client.exists?(:private_key => token)
Client.find_by_private_key(token)

ただし、何も機能せず、データベースに存在するレコードが見つかりません。ここで何が起こっているのか誰にも分かりませんか?私ができる必要があるのは、アクティブなレコードヘルパー、具体的には「Client.exists?(:private_key => token)」を利用して、提供されたトークンがデータベースに存在するかどうかを確認することだけです。

ご協力いただきありがとうございます!

更新 2013 年 4 月 18 日 @ 午前 9:30

Client.find(12)IDでレコードが見つかるかどうかを確認しようとしましたが、これは機能します。Client.exists?(:private_key => token)これでは、またはをまだ使用できない理由を理解するのに役立ちませんClient.find_by_private_key(token)

更新 2013 年 4 月 19 日 @ 午前 9 時 15 分

この問題に対する答えは、私の private_key 値を生成するコードが、値の末尾にリターン/空白を追加していたことです。そのため、private_key に基づいて行のデータベースをクエリしようとすると、常に何かを見つけることができませんでした。

この問題を解決するために、private_key を生成するコードの最後に gsub を追加しました。

private_key = SecurityHelper.encrypt_private_key(client_uuid).gsub(/\s+/, "")

これにより、生成された秘密鍵からすべての空白が削除され、問題が解決されました。

4

2 に答える 2

0

やってみました

Client.exists?(:private_key => "MkRBNUZBQzUtMzVDRi00NzQ3LThFNjEtNjI4OThERUQzQkRF")
于 2013-04-18T00:50:33.370 に答える