首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在托架rails中查找内容

在托架rails中查找内容
EN

Stack Overflow用户
提问于 2019-07-20 10:58:59
回答 2查看 84关注 0票数 0

所以我有一个变量,叫做@ CO2,它包含气体元素,比如一氧化碳,二氧化碳,一氧化碳。现在,如果有人在搜索功能中搜索CO,二氧化碳CO2会首先出现。所以我想知道我是否能做这样的事情

代码语言:javascript
复制
where("(lower(gas_analytes.gas)\[.*?\]) LIKE lower(?)", "#{gas_analyte}")

所以上面的代码,如果有人只搜索元素而不是整个内容,我使用了\[.*?\],所以如果搜索输入等于括号中的元素,但这不起作用。

有什么类似的我可以做的吗?

EN

回答 2

Stack Overflow用户

发布于 2019-07-20 12:10:18

我可能只是将方括号添加到搜索模式中,如下所示:

代码语言:javascript
复制
where("lower(gas_analytes.gas) LIKE ?", "%[#{gas_analyte.downcase}]%")

请注意,如果gas_analyze可能包含%字符,则应在使用该字符串之前对其进行清理:

代码语言:javascript
复制
where("lower(gas_analytes.gas) LIKE ?", "%[#{sanitize_sql_like(gas_analyte.downcase)}]%")

因为like非常慢,所以您可以考虑拆分字符串并将缩写提取到数据库列中。这将大大缩短查询时间。

票数 1
EN

Stack Overflow用户

发布于 2019-07-20 12:10:05

以下代码适用于我的(我使用的是SQLite数据库):

代码语言:javascript
复制
# seeds.rb
# Type `rake db:seed` in terminal to run this file

# GasAnalyte.destroy_all

10.times do |t|
  GasAnalyte.create!(
    gas: "#{SecureRandom.uuid} [CO2]"
  )
end

p ['All', GasAnalyte.all].inspect

p ['Searching for "CO"', GasAnalyte.search_gas("CO")].inspect
代码语言:javascript
复制
# gas_analyte.rb
class GasAnalyte < ApplicationRecord
  validates :gas, presence: true

  scope :search_gas,
    ->(gas_analyte) { where("lower(gas_analytes.gas) LIKE lower(?)", "%[#{gas_analyte}%]") }
end

在这里您可以阅读LIKE运算符:https://www.w3schools.com/sql/sql_like.asp

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57121466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档