ActiveRecord何时包含?()匹配

时间:2012-09-24 19:03:25

标签: ruby-on-rails-3 activerecord

我有一个带有属性subcategory_list的资源模型,它是一个以逗号分隔的子类别列表。是否可以执行仅提取属于某个子类别的资源的find_by_x方法(或等效方法)?

所以如果给出:

Resource.create(subcategory_list: "Fun, Games") # resource 1
Resource.create(subcategory_list: "Fun") # resource 2
Resource.create(subcategory_list: "Games") # resource 3

当输入为“Fun”时,我需要一个查询来获取资源1和2。我只能通过以下

返回“Fun”而不是“Fun,Games”
Resource.find_all_by_subcategory_list("Fun")
=> resource 2 (but not resource 1)

有没有办法修改此查询以包含“Fun,Games”?

2 个答案:

答案 0 :(得分:2)

如果subcategory_list是以逗号分隔的字符串:

Resource.where('subcategory_list LIKE ?', "%Fun%")

如果subcategory是相关联的模型:

Resource.joins(:subcategories).where('subcategories.name = ?', "Fun")

答案 1 :(得分:1)

我同意MrTheWalrus,但您可能还希望acts_as_taggable_on查看Michael Bleigh。看起来你正在做的是与Resource相关联的标签,acts_as_taggable_on gem将增加很多功能,而不必编写大量额外的代码,包括你现在尝试做的事情。