【发布时间】:2015-09-28 14:20:39
【问题描述】:
这很难解释,所以我将从我所拥有的开始。
用户 has_many 家属 用户和家属有名字。 我想要一个 User 的范围,它将返回其姓名或家属姓名与某个模糊文本匹配的所有用户。
它似乎没有返回所有预期的结果。这是我目前的范围:
scope :by_fuzzy_text, lambda { |text|
text = "%#{text}%"
joins(:dependents).where('name ILIKE ? OR dependents.name ILIKE ?', text, text).uniq
}
问题在于它返回了意外的结果。它似乎只适用于我数据库中的前 11 个用户,尽管有超过 100 个。所以无论范围匹配多么完美,它只会返回数据库中前 11 个用户之一的结果。如果我不使用 Joins,我就没有这个问题。
希望这是有道理的。最后的 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]
(April Shower,Zach Shower)
User.by_fuzzy_text('z') => [User2]
(Zach Shower)
User.by_fuzzy_text('x') => [User1]
(麦酒x史密斯)
User.by_fuzzy_text('smith') => [User1, User2]
(Sam Smith、Ralph Smith、Alex Smith、Sally Smith)
【问题讨论】:
标签: sql ruby-on-rails