Rails3 - has_many through结构上的ActiveRecord多值选择

时间:2014-03-25 18:45:10

标签: ruby-on-rails activerecord has-many-through

我深入了解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专家提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

试试这个:

companies = Company.all.select { |c| (kw_list - c.keywords).size.zero? }

如果公司的关键字列表包含kw_list - c.keywords变量中的每个元素,kw_list会为您提供一个空数组。否则,它会在kw_list中为您提供公司关键字列表中的关键字。因此,您需要阵列sizezero的所有公司。