【发布时间】:2014-07-17 13:03:42
【问题描述】:
我目前正在尝试在我的数据集中进行“复杂”搜索。 我想找到与特定工具关联的每个数据集。 我试过这样的事情:
Dataset.find_by_sql("SELECT * FROM datasets, tools, sectors, products WHERE datasets.id = sectors.dataset_id AND sectors.product_id = products.id AND products.tool_id = tools.id AND tools.name = '#{toolname}'")
这很好用。但是我们想为查询定义范围,以便以后能够组合其中的一些,例如:Dataset.find_by_toolname("foo").find_by_sector_name("foo2")。所以我为此定义了一个范围:
scope :with_tool_name, ->(toolname) {find_by_sql("SELECT * FROM datasets, tools, sectors, products WHERE datasets.id = sectors.dataset_id AND sectors.product_id = products.id AND products.tool_id = tools.id AND tools.name = '#{toolname}'")}
这里的问题是这个查询将返回一个数组而不是一个 ActiveRecord-Relation,因此我无法对第一个结果执行另一个范围请求。
那么我如何获取某个关联模型的属性具有特定值的数据......然后在此应用另一个范围?
数据模型如下所示:
【问题讨论】:
标签: sql ruby-on-rails database activerecord