【发布时间】:2013-03-15 06:52:32
【问题描述】:
我必须通过 has_many 关系搜索许多关联模型。为了论证,假设我有一个通过 has_many 关联包含许多类别的 Product 模型。因为我必须对许多父模型的子关联执行此操作,所以我创建了一个缓存表,我将关联中的所有 id 存储为逗号分隔的字符串 - '23,34,56,78' 而不是加入。这也有助于我稍后需要在类别 ID 上使用条件 AND 进行高级搜索。
我的问题是在活动记录中查询此类字符串中是否存在 id 的最佳方法是什么。例如,如果我希望所有父模型的关联 ID 为 34、56 和 78。
要准确搜索一个 id,我必须搜索 '%,34,%', '34,%', '%,34' 来说明 id 可以占据的字符串中的不同位置。有没有更简单的方法?
【问题讨论】:
-
真的比加入快吗?这似乎是一种奇怪的方法。
-
哈,好问题。部分问题是我正在按照railscasts.com/episodes/111-advanced-search-form-revised 的方式构建一个搜索系统,因此该系统的另一个优点是简化了涉及带有AND 的has_many 的查询。这有意义吗?
-
还值得一提的是,搜索方面最终需要查看 6-8 个 has_many 关系。所以我认为缓存表可能会简化事情。
-
您可能想看看一个非常方便的 gem:github.com/plataformatec/has_scope。它极大地简化了基于请求参数的查询。
标签: ruby-on-rails ruby-on-rails-3 activerecord