J'essaie de trouver un moyen de trouver un contenu associé sur mon blog sur mes rails en utilisant le champ "Nom" que j'ai. Y a-t-il un moyen de trouver des postes étroitement liés dans la base de données en fonction de la similitude du champ "nom".
Par exemple: p> et p> Post 2 name field = this-similarity-something-else
3 Réponses :
Je ne sais pas exactement ce que vous recherchez dans des rails, mais c'est comme ça que je le ferais dans SQL:
Post.where("name ILIKE 'this-similarity%'")
Si vous souhaitez simplement faire correspondre une sous-chaîne, vous pouvez utiliser un fichier wildcard si vous souhaitez incorporer quelque chose de plus flexible, vous pouvez essayer de devenir plus avancé avec RANSACACK et ELASTICSESEARCH < / p> p>
Ceci est venu près mais le problème est que j'ai plusieurs chaînes de noms. Par exemple Similarité-Model-One, Modèle de similarité-Deux, Satériquée-Modèle-Three Code> et je ne peux pas comprendre comment dépasser "Modèle-One, modèle-Two, modèle-Three-Three" de Le champ Nom afin de trouver des correspondances qui finissent par travailler avec quelque chose comme ce @Related_posts = post.where ("nom comme '% # {@ post.name}'") code>
@Patricka. - Je pense que Ransack peut vous aider à mettre en place des recherches entre plusieurs champs. J'ai bien peur de ne pas savoir exactement comment cela se fait ou s'il y a un moyen simple de le faire sans ransack.
Utiliser similaire à code> au lieu de comme code> - il permet de fonctionner avec des expressions régulières
Que signifie "grossièrement la même"? Est-ce que "cette similitude - autre chose" "à peu près la même chose? "Foo-bar-autre chose" "est-il grossièrement la même chose? Est-ce que "cette similaire-ity-autre-autre chose" à peu près la même chose?
Serait seulement "cette similitude" - il y a en fait assez de champs sous l'enregistrement de nom de 50% ou plus. Certainement pas "cette-similaire-ity-autre chose"
Peut-être regarder le
comme code> Opérateur de requête ...Vous pouvez effectuer une recherche générique dans ActiveRecord comme:
Post.Où ("Nom ILIKE '% Recherche-Term%') Code>. Ceci est pour une post-grave DB autres moteurs de requête peuvent avoir une syntaxe différente pour ilike. Ilike est insensible à la casse.Comment ferais-je
post.where ("Nom ILike '% Recherche-Term%') code> contre deux champs de noms? Seriez-vouspost.Où (" @ Nom_All_Posts .name ') code>