私は、コードに見苦しいSQLをたくさん含まずに、Railsの魔法を使用して、かなり複雑なクエリになると思うものを実現しようとしています。
私のデータベースはかなり特殊な生物医学モデルを扱っているので、以下をより現実的なシナリオに変換します。
私はモデルブックを持っています
has_many:chapters
とその章
所属する:book
たとえば、チャプターには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にあまり詳しくないので、どのような種類の結合が必要であり、これが名前付きスコープで実現できるかどうかはよくわかりません。
どうもありがとう
アンソニー