2016-04-01 27 views
1

Bir JSONb sütununa (meta veri) sahip bir postgres tablosuna (Kullanıcıları) sahibim. Şu anda bir Kullanıcıyı e-posta ile arıyorum ve e-postanın tam bir eşleşme olması dışında iyi çalışıyor.Bir postgres JSONb sütununda nasıl arama yapılıyor joker karakterleriyle joker karakterler

Bir kullanıcı [email protected] numaralı e-posta adresine sahipse ve User.by_email("[email protected]") numaralı telefonu kullanıyorsam büyük çalışıyor. Ancak, tüm kullanıcılara eşleşen bir e-posta ile dönmek için User.by_email("@smith.com")'u istiyorum. Ben şu var benim user.rb modelde

: User.by_email(email) çalışmak mümkün kılan budur

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

. İletilen dizeyle eşleşen bir e-postası olan tüm kullanıcıları bulmak için bunu nasıl değiştirebilirim?

Bunun ikinci kısmı, Kullanıcı adıyla da arama yapabilmek istiyorum.

Bu

scope :by_name, ->(name) { where("metadata @> ?", { session: { Primary: { FullName: name.to_s} } }.to_json) }

yoluyla bitmiş olacaktır nasıl aynı anda hem bu yapabilirim? Bu sadece basit activerecord olsaydı ben yapabileceğini biliyorum:

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

nasıl JSONb sütununda ile yapabilirsiniz?

cevap

1

Bunu yapabilirsin:

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

@Zack çalıştı? – Jesper