我想在连接列中搜索整个字符串。我有带有列的表产品:设计,颜色,代码和索引页面我使用模型方法在一个地方显示它们:
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 ||分别搜索。但是如何在一个列中搜索此连接列?
答案 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}%"})