【发布时间】:2018-10-09 11:12:10
【问题描述】:
当我有这样的值时,我想用“0”捕获行:
"0,1,8,9,10"
“10”
"0,1"
“4,5”
“1,5,10”
我继承的代码同时捕获了“0”和“10”的值,这是错误的:
scope :short_result_contains_value, -> (game_id, value) { where(game_id: game_id).where('short_result LIKE ?', "%#{value}%")
我正在尝试使用正则表达式来收紧搜索查询,但我无法让正则表达式捕获任何值:
scope :short_result_contains_value, -> (game_id, value) { where(game_id: game_id).where('short_result ~ ?', "/\b(#{value})\b/")}
当我运行它时,我在日志中看到正在运行以下查询:
SELECT "game_results".* FROM "game_results" WHERE "game_results"."game_id" = $1 AND "game_results"."game_id" = $2 AND (short_result ~ (0')
ActiveRecord 没有捕获任何应该捕获的值。如何修复正则表达式?谢谢!
我正在使用 Postgres,并且在 Rails 4.2、Ruby 2.3.7 上。
【问题讨论】:
-
如果您打算只返回以
value开头并后跟逗号的行,请尝试where('short_result LIKE ?', "#{value},%")。 -
我在日志中得到以下查询:(short_result LIKE '0, %'),它也没有返回任何结果..
-
嗯,
,和%之间应该没有空格。 -
行是否总是像示例中那样排序(所以 0 总是在开头)?
-
@Vasfed 不,它会随机排列
标签: ruby-on-rails regex named-scope