2016-04-01 18 views
1

私はJSONbカラム(メタデータ)を持つpostgresテーブル(Users)を持っています。現時点では、私は電子メールでユーザーを検索していますが、電子メールは完全一致でなければなりません。ruby​​ activerecordのワイルドカードでpostgres JSONbカラムを検索するには

ユーザーがメール[email protected]を持っていて、私がUser.by_email("[email protected]")を実行した場合、それは大きく機能します。しかし、User.by_email("@smith.com")は、一致する電子メールを持つすべてのユーザーを返すようにしたいと思います。私は、次のしている私のuser.rbモデルで

User.by_email(email)が動作することを可能にするものです

scope :by_email, ->(email) { where("metadata @> ?", { session: { Primary: { Email: email.to_s.downcase} } }.to_json) } 

。渡された文字列と一致する電子メールを持つすべてのユーザーを見つけるために、それを変更するにはどうすればよいですか?

この2番目の部分は、ユーザーの名前でも検索できるようにすることです。

これは私が両方同時にこれらの操作を行うことができますどのようにscope :by_name, ->(name) { where("metadata @> ?", { session: { Primary: { FullName: name.to_s} } }.to_json) }

を介して行うことでしょうか?これが単純なアクティブレコードだった場合は、私ができることは分かっています。

User.where("full_name LIKE ? OR email LIKE", "%#{search}%","%#{search}%") 

JSONb列でこれを行うにはどうしたらいいですか?

答えて

1

あなたはこれを行うことができます。

User.where("metadata->'session'->'Primary'->>'Email' LIKE ?", '%@smith.com') 
+0

@Zackはそれが動作したのですか? – Jesper

関連する問題