ich eine aktuelle Implementierung, die mir meine Suchergebnisse nach Kategorien NameSuche Funktionalität Schienen 4
class Category < ActiveRecord::Base
has_many :bike_categories
has_many :bikes, through: :bike_categories
end
class BikeCategory < ActiveRecord::Base
# Holds bike_id and category_id to allow multiple categories to be saved per image, as opposed to storing an array of objects in one DB column
belongs_to :bike
belongs_to :category
end
class Bike < ActiveRecord::Base
has_many :bike_categories, dependent: :destroy
has_many :categories, through: :bike_categories
end
Model
def self.search(params)
includes_categories(params[:name])
end
def self.includes_categories(category_names)
joins(:categories)
.where(categories: { name: category_names })
.group('bikes.id')
.having("count(*) = ?", category_names.size)
end
So filtern können, wenn ich die folgenden Daten haben
Bike
id: 1 title: 'Bike 1'
id: 2 title: 'Bike 2'
category
id: 1 name: 'Mens'
id: 2 name: 'Womens'
id: 3 name: 'Mountain Bike'
id: 4 name: 'Hybrid'
bike_categories
id: 1 bike_id: 1 :category_id: 2 # Womens, Mountain Bike
id: 2 bike_id: 1 :category_id: 3
id: 3 bike_id: 2 :category_id: 2 # Womens, Hybrid
id: 4 bike_id: 2 :category_id: 4
In meinem Filter, wenn ich wählen Womens
und Mountain Bikes
ich bekomme alle Bikes mit den Kategorien Womens, Mountain Bikes
, also in diesem Beispiel nur das eine Ergebnis.
Allerdings würde ich dann noch einen Schritt weiter gehen und eine andere Kategorie wählen, hybrid
(so würde ich Filter wählen Womens, Mountain Bikes, Hybrid
) und würde alle Fahrräder mögen, die entweder Womens, Mountain Bikes
und Womens, Hybrid
haben, so in diesem Fall sollte ich die 2 Ergebnisse erhalten zurückgegeben
Wie könnte ich diese Abfrage ändern, um dies zu ermöglichen?
Dank
zu ermöglichen, ich denke, Sie Ihre Anfrage wird wieder finden werden Fahrräder, die entweder „Frauen-Bikes“ sind oder "mountian bikes" - da du nur kategorien in den testdaten gegen bike 1 hast, kann jede frage nur ein bike zurückgeben - versuche mal ein mountian bike und einen frauen hybrid zu deinen testdaten hinzuzufügen und schau was passiert –
entschuldigung, es gab einen typo da, habe die Frage aktualisiert. wenn ich 3 Filterparameter wähle, erhalte ich keine Resultate – Richlewis
Ich denke, dass Sie es in zwei Attribute teilen mussten, um zu erhalten, was Sie wünschen - Geschlecht (Männer | Frauen) und bike_type (mountian Fahrrad | hybrid) –