【发布时间】:2018-10-22 00:59:39
【问题描述】:
联系人有一个整数字符串字段,如"1,10,14,5,15,2,5"。
例如我有 3 个联系人:
contact1 has `"1,10,111,2,5"`
contact1 has `"10,14,5,15,2,5"`
contact1 has `"10,14,5"`
当我尝试搜索“1”时,它会返回contact1,当我搜索2时,它会返回contact1和contact2
我已经尝试过这段代码:
contacts = Contact.all
contacts = contacts.where("tag_ids LIKE ?", "%#{tag}%")
但在这段代码中,如果我尝试找出 1,它会返回所有 3 个联系人。
【问题讨论】:
-
这三个都包含“1”,因此它的行为与您编写的行为完全相同!
-
我知道!这就是我在此处发布的原因,以便我可以更改现有查询!
-
您可能应该将包含您的 tag_ids 作为字符串的数据字段迁移并正确创建关系。好像您已经有一个 Tag 模型,所以您只需要一个联系人和标签的关联表并添加 has_and_belongs_to_many 关系。在您的迁移中,只需在删除之前将该字段中的所有这些 ID 移动到关联表中,您应该可以更轻松地根据标签 ID 查找联系人
-
最终我做了你提到的。它解决了问题。
标签: ruby-on-rails postgresql search activerecord ruby-on-rails-5.1