我深入了解ActiveRecord,并且已经超越了我的专业知识。
基本上我有一个公司模型,每个公司都有多个与之关联的关键字。我正在尝试编写一个查询,该查询返回包含所有指定关键字的公司列表(例如 - 向我显示所有带有关键字的公司&#39;金融服务&#39;以及&#39;共同基金&#39;)< / p>
这是模型定义
class Company
has_many :comp_keywords
has_many :keywords, :through => :comp_keywords
class CompKeyword
belongs_to :company
belongs_to :keyword
class Keyword
has_many :comp_keywords
has_many :companies, :through => :comp_keywords
我使用以下查询,该查询适用于单个关键字,但对于多个关键字搜索,它执行的是OR,而不是AND选择。
kw_list = ['Financial Services', 'Mutual Funds']
companies = Company.includes(:keywords).where(:keywords => {:name => kw_list})
我还尝试将此查询放在循环中,并且每次使用单个关键字而不是关键字列表调用它,但这不起作用。
非常感谢ActiveRecord专家提供的任何帮助!
答案 0 :(得分:0)
试试这个:
companies = Company.all.select { |c| (kw_list - c.keywords).size.zero? }
如果公司的关键字列表包含kw_list - c.keywords
变量中的每个元素,kw_list
会为您提供一个空数组。否则,它会在kw_list
中为您提供公司关键字列表中不的关键字。因此,您需要阵列size
为zero
的所有公司。