Cette fois, le nom du produit (nom) et la description du produit (description) enregistrés dans le tableau des articles Un mot-clé à partir des valeurs de nom de balise (tag _name) stockées dans la table des balises Je souhaite créer une implémentation d'une fonction de recherche. (La table des éléments et la table des balises forment une association utilisant une table intermédiaire dans une relation plusieurs-à-plusieurs.)
Créez votre propre méthode en 1 modèle d'élément, définissez les conditions de recherche de chaque table et affectez-les à des variables (@item, @sescription et @tag) 2 Créez un tableau vide et affectez-le à une variable (@items) 3 Obtenez-le comme un élément en appliquant chaque méthode et ajoutez-le au tableau. (En ce qui concerne les étiquettes, un produit peut avoir plusieurs étiquettes, donc le double de chacune est appliqué.) 4 Utilisez la méthode uniq pour supprimer les éléments qui se chevauchent. (Exemple: lorsque vous recherchez "pomme", si le mot-clé "pomme" est inclus à la fois dans le nom du produit @item et dans la description du produit @description, le même produit sera inclus dans le tableau @items. Parce que) 5 Enfin, décrivez explicitement la valeur de retour et envoyez les données aux paramètres (@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 Appelez la "méthode item_search" créée dans le modèle précédemment avec le contrôleur.
items-controller.rb
def item_search
@items = Item.item_search(params[:keyword])
end
7 Utilisez la méthode each pour récupérer les éléments contenus dans le tableau @items.
item_search.html
<% @items.each do |i| %>
<% =i.name%>
[Omis]
<% end %>
Recommended Posts