在两列中搜索子字符串

时间:2015-07-04 11:04:06

标签: ruby-on-rails regex string substring

我目前有一个范围:

scope :named,->(query) do
  where("(first_name || last_name) ~* ?", Regexp.escape(query || "a default string to prevent Regexp.escape(nil) errors"))
end

除了first_name或last_name为nil之外,这是有效的。如果其中一列是nil,我如何找到这些列?

2 个答案:

答案 0 :(得分:0)

我认为你可以尝试这样的事情:

scope :named,->(query) do
  where("first_name IS NOT NULL OR last_name IS NOT NULL AND (first_name || last_name) ~* ?", Regexp.escape(query || "a default string to prevent Regexp.escape(nil) errors"))
end

答案 1 :(得分:0)

这是搜索姓名的基本范围,它只处理' first_name','仅限#last;'或搜索全名。

如果将查询拆分为数组,则可以获取数组的第一个和最后一个,并且无论查询的长度是一个还是两个都无关紧要。

如果需要,您可以使用正则表达式替换拆分

你显然可以对此进行扩展(例如不区分大小写,排序),但给出了基本的想法。

如果条带失败,还可以通过默认为空字符串来处理nil查询。

scope :named,->(query) do
  query.strip! rescue query = ""
  query_words = query.split(' ')
  where(["first_name LIKE ? OR last_name LIKE ?", "#{query_words.first}%", "#{query_words.last}%"])
end

希望这有帮助