2017-01-22 4 views
0

J'ai un formulaire de recherche qui retourne nos produits. Cependant, si un utilisateur entre une chaîne qui contient certains mots (dans ce cas, «couleur»), il renvoie beaucoup trop de produits. J'essaie de supprimer la chaîne 'color' de la requête recherchée dans le backend, mais je maintiens la chaîne de la requête d'origine sous la forme @unfiltered_query afin que je puisse référencer la requête @unfiltered sur le modèle frontal. Il ne fonctionnait pas, alors j'ai couru à la tire pour voir ce qui se passait. Dans le formulaire, j'ai cherché "couleur de peinture rouge". Lorsque j'appelle @unfiltered_query dans pry, il affiche "Red paint", même si je crée la méthode avant .slice! est appelé?!Pourquoi mon instance n'est pas enregistrée dans mon formulaire de recherche?

Qu'est-ce qui me manque?

Merci!

p.s. le modèle HTML que j'utilise pour faire référence à l'instance est:

<div class="search-input"><h2> 
    <% if @unfiltered_query.present? %> 
     <%= @unfiltered_query.titleize %> 
    <% else %> 
     <%= query.titlelize %> 
    <% end %> 
</h2></div> 

Répondre

1

Pouvez-vous essayer comme ceci:

if query.include? "color" 
    @unfiltered_query = query.dup 
end 
query.slice! "color" 
values = query.split 
binding.pry 

Cela pourrait être dû au passage par référence.

+0

Cela a fonctionné parfaitement! Qu'est-ce qui passe par référence? Je vous remercie!!! – user3247042

+0

Plutôt que de copier la valeur de 'query' et d'affecter' @ unfiltered_query', '@ unfiltered_query' aura une référence à' query', de sorte que si vous changez l'un d'entre eux, il sera reflété dans l'autre ainsi que. –

+0

Oh mec, maintenant le @unfiltered_query n'est pas appelé sur le front-end. Dois-je faire quelque chose pour le rendre disponible au modèle frontal? – user3247042