Rails在连接列

时间:2016-07-18 10:32:06

标签: sql ruby-on-rails search join

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

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

我想在此连接列中搜索。例如: 加入专栏是:“Strips Black Plain” 如果我要输入搜索字段“Strips Bl”,我想获得所有匹配的srings。例如:Strips Black Plain2,Strips Blue Plain等

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

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

我知道我可以在几个列中同时搜索但是使用operator ||分别搜索。但是如何在一个列中搜索此连接列?

2 个答案:

答案 0 :(得分:0)

我会将搜索查询更改为此类:

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

的更多信息

答案 1 :(得分:0)

<强>解决 加入组合2表。 Concat在mutlitple列中搜索。

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}%"})