【发布时间】:2009-07-06 17:07:55
【问题描述】:
我正在尝试使用 Rails 的魔力来实现我认为相当复杂的查询,而代码中不会出现很多丑陋的 SQL。
由于我的数据库正在处理相当专业的生物医学模型,因此我将以下内容转换为更真实的场景。
我有一本样书
has_many:章节
和那一章
belongs_to :book
例如,Chapters 有一个 name 属性,名称可以是 preface,introduction 和 appendix,而 Book 可以有一个名为 preface 的 Chapter 和一个名为 Introduction 但没有名为 appendix 的章节。实际上这些的任意组合
我正在寻找所有同时包含名为序言和介绍的章节的书籍。
目前我有一个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]}
}
如果我打电话给书。有章? ["preface", "introduction"] 这将为我找到所有具有名为序言或介绍的章节的书籍。我怎么能做类似的事情来发现我将两个章节序言和介绍隔离开来?
我对 SQL 不是很熟悉,所以不太确定需要什么样的连接,以及这是否可以在命名范围内实现。
非常感谢
安东尼
【问题讨论】:
标签: ruby-on-rails activerecord associations named-scope