0

新しいレストランのリストがあり、電話番号を使用してレストランのデータベースと照合したいと思います。電話番号の問題は、データベース内のフォーマットが異なることです(つまり123-345-6789、または(123)-456 8988)。

これまでのところ、電話のインデックスを作成して、すばやく検索できるようにしています。また、新しいレストランの電話番号を削除して、数値(0〜9)のみが含まれるようにしました。

ここで、数値を厳密に比較するために、比較する直前にデータベースの数値を削除したいと思います。

#strip the phone of non-numeric values and spaces
formatted_phone = SunspotHelper.sanitize_term(pr.phone).gsub(/\s+/, "") 

Restaurant.where(contact_phone: formatted_phone).each do |r|
  #irrelevant code here
end

上記のコードの問題は、(データベースからの)contact_phoneがストリップされていない形式になることです。これまでの私の調査では、のようなものを使用する必要があると私は信じていますがREGEXP_LIKE、Railsでこれを実装する方法がよくわかりません。データベースを更新したくない-DBに元のフォーマットを保持したまま、比較のために数値を削除したいだけです。

contact_phoneと比較する前に、データベースから非数値の電話番号を削除するにはどうすればよいformatted_phoneですか?

4

1 に答える 1

1

(データベース内の別のフィールドの電話番号を適切にフォーマットするのではなく)Railsクエリに労力を制限したい場合は、DBエンジンのREGEXP機能を使用する方法を次に示します。

Restaurant.where(["REGEXP_REPLACE(contact_phone, '[^[:digit:]]', '') = ?", formatted_phone]).each do |r|
  #irrelevant code here
end
于 2012-11-01T22:38:31.263 に答える