Я пытаюсь достичь того, что, как мне кажется, будет довольно сложным запросом, используя магию Rails, не имея большого количества уродливого SQL в коде.
Поскольку моя база данных имеет дело с довольно специализированными биомедицинскими моделями, я переведу следующее в более реальный сценарий.
У меня есть модель книги, которая
has_many :главы
и глава, что
принадлежит_к :книге
Скажем, например, главы имеют атрибут имени, и имена могут быть предисловием, введением и приложением, а книга может иметь главу с именем предисловие и главу с именем введение, но не главу с именем приложение. На самом деле любая комбинация этих
Я ищу все книги, в которых обе главы названы предисловием и введением.
В настоящее время у меня есть 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, поэтому не совсем уверен, какое соединение потребуется и можно ли этого достичь в именованной области.
Большое спасибо
Энтони