Ruby on rails 3 ActiveRecord在包含()匹配项时查找

Ruby on rails 3 ActiveRecord在包含()匹配项时查找,ruby-on-rails-3,activerecord,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")

我有一个带有属性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
当我的输入是“有趣”时,我需要一个查询来获取资源1和资源2。我只能返回“乐趣”,但不能返回“乐趣,游戏”和以下内容

Resource.find_all_by_subcategory_list("Fun")
=> resource 2 (but not resource 1)

是否有办法修改此查询以同时包含“乐趣、游戏”?

如果
子类别列表是逗号分隔的字符串:

Resource.where('subcategory_list LIKE ?', "%Fun%")
如果
子类别
是关联模型:

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

如果
子类别列表
是逗号分隔的字符串:

Resource.where('subcategory_list LIKE ?', "%Fun%")
如果
子类别
是关联模型:

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

我同意海象先生的看法,但你也可以到我这儿来。看起来您正在做的是与资源关联的标记,而gem上的acts_as_taggable_将增加很多功能,而无需编写很多额外的代码,包括您现在正在尝试做的事情。

我同意海象先生的观点,但您也可能希望通过。看起来您正在做的是与资源关联的标记,而gem上的acts_as_taggable_将增加很多功能,而无需编写大量附加代码,包括您现在正在尝试做的事情。

我实际上正在重组以消除ActsaStaggaleon,因为我不需要所有额外的功能,并且希望尽可能少地访问数据库。对于开箱即用的功能和简单的设置,我同意!现在,你为什么要这么做是有道理的。很高兴知道。这肯定符合海象先生的建议。事实上,我正在重组以消除ACTSASTAGGALEON,因为我不需要所有额外的功能,并且希望尽可能少地访问数据库。对于开箱即用的功能和简单的设置,我同意!现在,你为什么要这么做是有道理的。很高兴知道。这肯定符合海象先生的建议。