Diesmal werden der Produktname (Name) und die Produktbeschreibung (Beschreibung) in der Artikeltabelle gespeichert Ein Schlüsselwort aus den in der Tags-Tabelle gespeicherten Werten für den Tag-Namen (Tag-Name) Ich möchte eine Implementierung einer durchsuchbaren Funktion erstellen. (Die Elementtabelle und die Tags-Tabelle bilden eine Zuordnung unter Verwendung einer Zwischentabelle in einer Viele-zu-Viele-Beziehung.)
Erstellen Sie Ihre eigene Methode in einem Artikelmodell, definieren Sie die Suchbedingungen aus jeder Tabelle und weisen Sie sie Variablen zu (@item, @sescription und @tag). 2 Erstellen Sie ein leeres Array und weisen Sie es einer Variablen zu (@items). 3 Holen Sie es als ein Element ab, indem Sie jede Methode anwenden und dem Array hinzufügen. (Bei Tags kann ein Produkt mehrere Tags haben, daher wird jeweils das Doppelte angewendet.) 4 Verwenden Sie die uniq-Methode, um die überlappenden Elemente zu entfernen. (Beispiel: Wenn Sie nach "apple" suchen und das Schlüsselwort "apple" sowohl im Produktnamen @item als auch in der Produktbeschreibung @description enthalten ist, wird dasselbe Produkt in das Array @items aufgenommen. Weil) 5 Beschreiben Sie abschließend explizit den Rückgabewert und senden Sie die Daten an params (@items).
item.rb
def self.item_search(search)
if search != ""
@item = Item.where('name LIKE(?)', "%#{search}%")
@description = Item.where('description LIKE(?)', "%#{search}%")
@tag = Tag.where('tag_name LIKE(?)', "%#{search}%")
@items = []
@item.each do |i|
@items << i
end
@description.each do |d|
@items << d
end
@tag.each do |t|
t.items.each do |ta|
@items << ta
end
end
@items = @items.uniq
return @items
else
return nil
end
end
end
6 Rufen Sie die zuvor mit dem Controller im Modell erstellte "item_search-Methode" auf.
items-controller.rb
def item_search
@items = Item.item_search(params[:keyword])
end
7 Verwenden Sie jede Methode, um die im Array @items enthaltenen Elemente abzurufen.
item_search.html
<% @items.each do |i| %>
<% =i.name%>
[Ausgelassen]
<% end %>
Recommended Posts