我正在试验一些概念(实际上是通过构建1978年数据库WHATSIT的RoR版本来玩和学习)。从数组构建ILIKE子句
它基本上是一个has_many:通过结构与主题 - >标签< - 价值。我试图通过使用查询文本字段来输入命令来复制一些命令行结构。基本上是这样的:What's steve's phone
。
总之,大多数搜索使用ILIKE。我虽然通过允许OR条件使用某种形式的数组来增强它。像What's steve's [son,daugher]
。我通过直接创建ILIKE子句来实现它,但不能用字符串替换。
def bracket_to_ilike(arrel,name,bracket)
bracket_array = bracket.match(/\[([^\]]+)\]/)[1].split(',')
like_clause = bracket_array.map {|i| "#{name} ILiKE '#{i}' "}.join(" OR ")
arrel.where(like_clause)
end
bracket_to_ilike(tags,'tags.name','[son,daughter]')
产生类似条款tags.name ILiKE 'son' OR tags.name ILiKE 'daughter'
而且它得到了关系,但所有人都在谈论使用形式("tags.name ILiKE ? OR tags.name ? ",v1,v2,vN..)
,我以为我会问,如果任何人有如何做任何想法那。
动态创建变量可以从我搜索的内容中获得,但不支持。我只是想知道是否有人试图创建一个方法,可以添加一个具有可变数字参数的where子句。我尝试将where子句发送给关系,但它不喜欢那样。
史蒂夫
你让我更接近,但时间循环返回一个固定的数字,给予和连接错误。回到我的地图循环并使用splat,它给出了类似于子句和变量的权利。起初它给了我一个And子句,但我认为是因为我的标签实例搞砸了。 'tags.where(* [bracket_array.map {| i |“#{name} ILiKE?”} .join(“OR”),* bracket_array])'工作。现在我只需要明白为什么要在哪里取数组参数。这个实验又是为了学习更多的Ruby。 – appleII717
@ appleII717是的,你说得对。我应该有'bracket_array.size.times.map'(缺少.map)。我更新了我的帖子。 –