查询在活动记录中存储为逗号分隔字符串的数组

时间:2013-03-15 06:52:33

标签: ruby-on-rails ruby-on-rails-3 activerecord

我必须通过has_many关系搜索许多相关模型。为了论证,让我说我有一个通过has_many关联有许多类别的Product模型。因为我必须在许多父模型的子关联中执行此操作,所以我创建了一个缓存表,其中我将关联中的所有id存储为逗号分隔的字符串 - '23,34,56,78'而不是执行加入。这也有助于我稍后需要在类别ID上使用条件AND进行高级搜索。

我的问题是在活动记录中查询此类字符串中是否存在id的最佳方法是什么。例如,如果我希望所有父模型都具有ids 34,56和78的关联。

要准确搜索一个ID,我必须搜索'%,34,%','34,%','%,34',以便考虑id可以占用的字符串中的不同位置。有更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我不知道这会有多快,但你可以用逗号分割字符串来创建一个数组,然后在所说的数组上做一个.includes?() ......但这真的比SQL快吗?

value.split(',').includes?(other_value)

或有多个项目:

value.split(',') && [id1, id2, id3]

这将返回两个数组中出现的ID列表。