【问题标题】:Rails search whole string in join columnRails 在连接列中搜索整个字符串
【发布时间】:2016-11-20 22:17:15
【问题描述】:

我想在连接列中搜索整个字符串。我有带有列的表格产品:设计、颜色、代码,在索引页面中我使用模型方法将它们显示在一个地方:

def name
 [design.name, color, code_name(code)].join(' ').to_s
end

我想在此加入列中进行搜索。例如: 加入栏目是:“条黑平原” 如果我在搜索字段中输入“Strips Bl”,我想获得所有匹配的字符串。例如:Strips Black Plain2、Strips Blue Plain 等。

当我在一列中进行搜索时,我使用了模型方法:

 def self.search(letter)
    if letter
      where("colorLIKE ?", "%#{letter}%").order(:created_at)
    else
      all
  end

我知道我可以同时在多个列中进行搜索,但可以分别使用运算符 || 进行搜索。但是如何像在一列中一样在此连接列中进行搜索?

【问题讨论】:

标签: sql ruby-on-rails search join


【解决方案1】:

我会将我的搜索查询更改为这样的:

def search(keyword)
  where("LOWER (design) LIKE LOWER(:s) OR LOWER(color) LIKE LOWER(:s) OR LOWER(code) LIKE LOWER(:s) or concat(LOWER(design), ' ', LOWER(color)) LIKE LOWER(:s)", {s: "%#{keyword}%"})
end

所以主要思想是在数据库级别使用CONCAT 来一起搜索一两列。更多关于 concatenate

【讨论】:

  • Concat 正是我想要的!谢谢你。如果搜索列之一将是来自不同表的列,是否有机会使用 concat?在我的情况下,列:design.name 来自不同的表:design。并且设计属于产品。
【解决方案2】:

已解决 加入以组合 2 个表。 Concat 在多列中搜索。

joins(:design).where("LOWER(designs.name) LIKE LOWER(:s) OR LOWER(color) LIKE LOWER(:s) OR LOWER(code) LIKE LOWER(:s) or concat(LOWER(designs.name), ' ', LOWER(color), ' ', LOWER(code)) LIKE LOWER(:s)", {s: "%#{letter}%"})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 2013-05-02
    • 2015-05-12
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多