で、私は文字列の配列必要はありませ:Railsはクエリや正規表現
a = ['*@foo.com', '*@bar.com', '*@baz.com']
を私は、電子メールは、上記のドメインのいずれかに存在しないすべてのレコードを取得するので、私のモデルを照会したいと思います。
私が行うことができます:
Model.where.not(email: a)
リストは、文字列のリストになりますが、リストは、正規表現の多い場合。
で、私は文字列の配列必要はありませ:Railsはクエリや正規表現
a = ['*@foo.com', '*@bar.com', '*@baz.com']
を私は、電子メールは、上記のドメインのいずれかに存在しないすべてのレコードを取得するので、私のモデルを照会したいと思います。
私が行うことができます:
Model.where.not(email: a)
リストは、文字列のリストになりますが、リストは、正規表現の多い場合。
データベースアダプタによって異なります。おそらく、生のSQLを使用してこのタイプのクエリを書くことができます。たとえば、あなたができるのpostgresに:
Model.where("email NOT SIMILAR TO '%@foo.com'")
私はあなたがそれをやるべき正確にどのようthatsのことを言っていないよ、それはあなたのデータベースのクエリ言語を見て、何があなたのニーズにマッチするかどうかを確認する価値があります。
例では、マッチャを1つの文字列として結合し、それをクエリに挿入する必要があります。
a = ['%@foo.com', '%@bar.com', '%@baz.com']
Model.where("email NOT SIMILAR TO ?", a.join("|"))
使用このコード:
a = ['%@foo.com', '%@bar.com', '%@baz.com']
Model.where.not("email like ?",a.join("|"))
配列に%
から*
を交換してください。
PostgreSQLを使用しており、データに大文字と小文字が混在している場合は、「LIKE」ではなく「ILIKE」を使用する必要があります。 –
Postgresと私はnot not like notationを認識しています - 文字列の配列しかないので、単に**'%@foo.com'**の中に貼り付けることはできません。 – Kocur4d
Postgresでは、 '|'演算子を使ってlikeに複数の引数を使うことができるので、a.join( '|')を補間して、パターンがポストグラム形式であることを確認してください。 – tpbowden
ちょっと読んだら「類似」のように見えます。私は答えを更新しました – tpbowden