這很難解釋,所以我將從我得到的東西開始。選擇實例OR關聯匹配模糊文本的實例
用戶has_many受撫養人 用戶和受撫養人有姓名。 我想要一個用戶範圍,它將返回所有名稱爲,或者其依賴名稱匹配某個模糊文本的用戶。
它似乎沒有返回所有的預期結果。這是我目前的範圍:
scope :by_fuzzy_text, lambda { |text|
text = "%#{text}%"
joins(:dependents).where('name ILIKE ? OR dependents.name ILIKE ?', text, text).uniq
}
問題是它返回意外的結果。它似乎只適用於我的數據庫中的前11位用戶,儘管超過了100位。因此,無論範圍匹配得多麼完美,它只會返回數據庫中前11名用戶之一的結果。我沒有這個問題,如果我不使用聯接。
希望這是有道理的。 uniq最終是因爲如果用戶有多個依賴項,則用戶會多次返回,每個依賴項都會返回一次。
實施例:
User1 = "Sam Smith"
-Dependent1.1 = "Ralph Smith"
-Dependent1.2 = "Alex Smith"
User2 = "April Shower"
-Dependent2.1 = "Zach Shower"
-Dependen2.2 = "Sally Smith"
User.by_fuzzy_text('w') => [User2]
(四月昭瓦特呃扎克昭瓦特 ER)
User.by_fuzzy_text('z') => [User2]
(Ž ACH淋浴)
User.by_fuzzy_text('x') => [User1]
(ALE X史密斯)
User.by_fuzzy_text('smith') => [User1, User2]
(山姆史密斯拉爾夫史密斯,阿萊克斯史密斯,薩利史密斯)