У меня есть модель, скажем Book
, которая имеет следующую функцию объема:
scope :author, lambda { |author|
return where(nil) unless author.present?
joins(:author).where('author.id' => author)
}
Это может фильтровать Книги только с одним значением автора.Я хочу, чтобы мне передали массив из файла JavaScript, который представляет собой список авторов, например: ["harry", "doyle", "alex", "parrish"]
, и я хочу иметь возможность найти все книги, которые ЛЮБЫЕ из этих авторов (поэтому запрос ИЛИВот).Обратите внимание, что у каждой книги может быть несколько авторов.
Я попробовал следующую функцию, но она просто дает мне все книги вместо того, чтобы правильно фильтровать, как я уже говорил выше.
scope :authors_multiple, lambda { |authors|
@results = Book
authors.each do |auth|
@results = @results.author(auth)
end
return @results
}
модель Автор (извлечение)):
class Author < ApplicationRecord
has_and_belongs_to_many :books, uniq: true
....
модель Книга (выдержка):
class Book < ApplicationRecord
has_and_belongs_to_many :authors, uniq: true
....
Не могли бы вы помочь мне понять, что я делаю неправильно или что может быть правильным способом сделать это.Заранее спасибо.