我正在尝试一些概念(实际上是通过构建 1978 年数据库 WHATSIT 的 RoR 版本来玩和学习?)。
它基本上是一个 has_many :through 结构,主题 -> 标签 <- 值。我尝试通过使用查询文本字段输入命令来复制一些命令行结构。基本上是这样的: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]')
产生like子句tags.name ILiKE 'son' OR tags.name ILiKE 'daughter'
它得到了关系,但在所有关于使用表格的讨论中 ("tags.name ILiKE ? OR tags.name ? ",v1,v2,vN..)
,我想问是否有人对如何做到这一点有任何想法。
根据我的搜索,动态创建变量是可行的,但不赞成。我只是想知道是否有人尝试过创建可以添加具有可变编号参数的 where 子句的方法。我尝试将 where 子句发送到关系,但它不喜欢那样。
史蒂夫