gpt4 book ai didi

mysql - 使用 LIKE 对未知(动态)查询数量进行 Rails SQL 查询

转载 作者:太空宇宙 更新时间:2023-11-03 18:08:07 24 4
gpt4 key购买 nike

我有一个执行动态查询的 Rails 搜索表单。也就是说,用户输入如下搜索:

(hobby="skiing") OR (gender="male" AND hobby="jogging") 

因此,我不知道在运行时之前我将搜索多少个查询。

我通过将搜索查询转换为有效的 SQL 查询来解析搜索查询,因此上述搜索将转换为以下格式:

query = "hobby LIKE ? OR (gender LIKE ? AND hobby LIKE ?)"
queries = ["skiing", "male", "jogging"]

对于以下查询:

where(query, queries)

但是,Rails 搜索查询的一般语法非常有限:

where(query, query_1, query_2, query_3)

如果 Rails 不抛出错误,我无法像我想要的那样用数组替换“query_n”参数。

NoMethodError (undefined method `where' for ["a", "b", "c"]:Array)

正在尝试 splat该数组产生相同的错误:

where(query, *queries)

再次:

NoMethodError (undefined method `where' for ["a", "b", "c"]:Array)

那我该怎么办呢?

编辑:

完整的搜索功能如下所示:

def self.search(search)
query = "%#{search}%"
if search
includes(:games, :jobs)
strngs = ["hobby = ? OR name = ? OR gender = ?", "dsfgdsfg", "dsgsdfgsd", "sdfsfsdf"]
.where(strngs)

最佳答案

您要做的是将一个数组作为单个参数传递给 where,其中包含查询和动态值。例如:

where(["att_1 LIKE ? OR att_2 LIKE ?", "value1", "value2"])

如果数组作为第一个也是唯一的参数传递,则数组的第一个元素被视为模板。以下数组值被视为查询模板的动态值。

对于您的示例,不是有两个单独的变量 queriesquery,而是将它们组合成一个 query 变量:

# A single array with the query AND values
query = ["hobby LIKE ? OR (gender LIKE ? AND hobby LIKE ?)", "skiing", "male", "jogging"]

# Run the `where` with a single array as the argument
YourModel.where(query)

这将允许您使用 LIKE 查询具有未知数量值的数据库。

For reference: Rails where() docs

关于mysql - 使用 LIKE 对未知(动态)查询数量进行 Rails SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40287534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com