我必须通过has_many关系搜索许多相关模型。为了论证,让我说我有一个通过has_many关联有许多类别的Product模型。因为我必须在许多父模型的子关联中执行此操作,所以我创建了一个缓存表,其中我将关联中的所有id存储为逗号分隔的字符串 - '23,34,56,78'而不是执行加入。这也有助于我稍后需要在类别ID上使用条件AND进行高级搜索。
我的问题是在活动记录中查询此类字符串中是否存在id的最佳方法是什么。例如,如果我希望所有父模型都具有ids 34,56和78的关联。
要准确搜索一个ID,我必须搜索'%,34,%','34,%','%,34',以便考虑id可以占用的字符串中的不同位置。有更简单的方法吗?
答案 0 :(得分:0)
我不知道这会有多快,但你可以用逗号分割字符串来创建一个数组,然后在所说的数组上做一个.includes?()
......但这真的比SQL快吗?
value.split(',').includes?(other_value)
或有多个项目:
value.split(',') && [id1, id2, id3]
这将返回两个数组中出现的ID列表。