Supposons qu'une base de données contienne un champ 'keywords' et que les exemples d'enregistrements incluent: "Clé à pipe" "Clé à molette" "Clé à croissant".
existe-t-il un moyen d'activerecord pour trouver les enregistrements où le champ mot-clé contient la sous-chaîne "croissant"?
(C'est juste une recherche rapide et sale pour un prototype de concept rapide)
Oui, utilisez simplement une instruction LIKE dans MySQL.
Dans Rails 2.x:
Table.find(:all, :conditions => ['keywords LIKE ?', '%crescent%'])
Dans Rails 3.x:
Table.where('keywords LIKE ?', '%crescent%').all
La syntaxe de la base de données Postgres serait:
YourModelName.where("yourFieldName like ?", "%" + yourSearchTerm + "%")
Tout dépend de votre base de données. Est-ce Postgres? MySQL? MongoDB? Rien d'autre?
Avec Postgres, vous pourriez utiliser quelque chose comme:
Rails 2.x => Model.find(:all, :conditions=>["models.keywords ~= ?", 'crescent'])
Rails 3.x => Model.where("models.keywords ~= ?", 'crescent')
Il vous suffit de trouver la syntaxe appropriée pour votre version de DB/Rails/ActiveRecord.
J'ai eu un problème similaire. J'avais besoin de voir si des mots-clés avaient été passés à partir d'une entrée contrôlée dans le composant frontal dans le corps des questions de mon tableau de questions. Voici comment je l'ai fait dans mon contrôleur:
def search
input = params[:q]
@questions = Question.all
search_words = input.split(' ')
@found_question = [];
search_words.each do |Word|
@found_question << Question.where("questions.body LIKE ?", "%#{Word}%")
end
end