Ransack, finde einen Datensatz mit allen zugehörigen Datensätzen

Ich habe ein Rezeptmodell, das viele Zutaten enthält, und jede Zutat gehört zu einem Gegenstand. In meinem erweiterten Suchformular möchte ich, dass ein Benutzer mehrere Zutaten auswählt und Ransack ein Rezept findet, das alle vom Benutzer ausgewählten Zutaten enthält.

Ich habe folgendes Suchfeld ausprobiert:

= f.collection_select(:ingredients_item_id_in, Item.all, :id, :name, {}, {multiple: true})

Aber logischerweise werden alle Rezepte angezeigt, die eine der ausgewählten Zutaten enthalten.

Ändern:ingredients_item_id_in zu:ingredients_item_id_in_all führt zu einer falschen Abfrage, da ein Datensatz nicht mehrere Werte von item_id enthalten kann.

Haben Sie Ideen zum Erstellen dieses Suchparameters in Ransack oder sollte ich dafür eine Unterabfrage erstellen?

Auf Anfrage, meine Controller-Methode für die Suche:

  def search
    @q = Recipe.ransack(params[:q])
    @recipes = @q.,result(distinct: true).include_related_models.published
  end

Antworten auf die Frage(2)

Ihre Antwort auf die Frage