我想实现我认为这将是使用Rails的魔术一个相当复杂的查询,而不必在代码中很多难看的SQL的轨道。named_scope与联想的has_many
由于我的数据库处理,而专门的生物医学模式,我会翻译下面一个更真实的场景。
我有一个模型·那
的has_many:章
和章说
belongs_to的:书
例如说分会有一个name属性和名称可以是前言,引言和附录,一本书可以有章节序言和章节命名介绍,但没有章节命名附录。其实这些
任意组合,我希望找到的是有一个名为前言和引进两章的所有书籍。
目前我有一个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]}
}
如果我呼吁书。 has_chapter? [“序言”,“介绍”]这将会找到我所有的书,其中有章节序言或介绍。我怎么能做类似的事情,会发现我的菌株章节序言和介绍?
我并不熟悉SQL所以我不太清楚什么样的加入,将需要以及是否应该在一个名为范围来实现。
非常感谢
安东尼
这个工程很好,如果有点慢。添加了一些指标帮助。 – Anthony 2009-07-16 16:01:46