我试图使用Rails的魔力实现我认为将是一个相当复杂的查询,而不会在代码中看到很多丑陋的SQL.
由于我的数据库处理的是相当专业的生物医学模型,我将把以下内容翻译成更真实的场景.
我有一本模特书
has_many:章节
和那章
belongs_to:书
例如,章节有一个名称属性,名称可以是前言,介绍和附录,一本书可以有一个名为前言的章节和一个名为引言的章节,但没有章节命名为附录.实际上是这些的任何组合
我希望找到所有包含章节命名前言和介绍的书籍.
目前我有一个named_scope如下
Book
named_scope :has_chapter?, lambda { |chapter_names|
condition_string_array = []
chapter_names.size.times{condition_string_array << "chapters.name = ?"}
condition_string = condition_string_array.join(" OR ")
{:joins => [:chapters] , :conditions => [condition_string, * chapter_names]}
}
Run Code Online (Sandbox Code Playgroud)
如果我打电话给Book.has_chapter?["前言","引言"]这将找到我所有的书籍,其中有一章名为序言或介绍.我怎么能这样做会找到我分离株类似的事情都记前言和简介?
我不熟悉SQL,所以我不太确定需要什么样的连接以及是否可以在命名范围内实现.
非常感谢
安东尼