gpt4 book ai didi

ruby-on-rails - 正确转义反斜杠

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:25 24 4
gpt4 key购买 nike

我在查询中转义反斜杠时遇到问题。我有一个看起来像这样的模型报告:

class Report < ActiveRecord::Base
belongs_to :person
end

和模型 Person 看起来像这样:

class Person < ActiveRecord::Base
attr_accessible :first_name, :last_name, :middle_name
end

我有这样的查询:

Report.includes(:person).where("concat_ws(' ', lower(people.first_name), lower(people.middle_name), lower(people.last_name)) ~* :keyword", {keyword: "User name"}).references(:people)

该查询的问题在于当用户输入搜索反斜杠时该查询不起作用:

Report.includes(:person).where("concat_ws(' ', lower(people.first_name), lower(people.middle_name), lower(people.last_name)) ~* :keyword", {keyword: "User name\"}).references(:people)

然后它返回:

PG::InvalidRegularExpression: ERROR: invalid regular expression: invalid escape \ sequence

最佳答案

尝试在查询中使用 LIKE,而不是 ~*,这样用户输入就不会被解释为正则表达式。

更新:将您的用户输入包含在 % 中,如下所示:

Report.includes(:person).where("concat_ws(' ', people.first_name, people.middle_name, people.last_name) ILIKE :keyword", { keyword: "%#{params[:input]}%" }).references(:people)

ILIKE 执行不区分大小写的搜索,因此您不再需要 lower

您可能还需要对用户输入中的任何 _% 进行转义,这样它就不会被 Postgres 解释为特殊符号 (_代表任意字符,%代表任意数量的字符)。

查看docs有关详细信息和示例。祝你有美好的一天!

关于ruby-on-rails - 正确转义反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com