Вы можете использовать activerecord, чтобы найти подстроку поля? (быстрый и грязный поиск ключевых слов) - PullRequest
41 голосов
/ 18 февраля 2011

Предположим, база данных содержит поле "ключевые слова", а примеры записей включают в себя: "трубный ключ" "гаечный ключ" "полумесяц" "Полумесяц" "Обезьяны бары"

есть ли в activerecord способ найти записи, в которых поле ключевого слова содержит подстроку "crescent"?

(Это просто быстрый и грязный поиск быстрого прототипа концепции)

Ответы [ 4 ]

81 голосов
/ 18 февраля 2011

Да, просто используйте оператор LIKE в MySQL.

В Rails 2.x:

Table.find(:all, :conditions => ['keywords LIKE ?', '%crescent%'])

В Rails 3.x:

Table.where('keywords LIKE ?', '%crescent%').all
15 голосов
/ 17 февраля 2014

Синтаксис базы данных Postgres будет:

YourModelName.where("yourFieldName like ?", "%" + yourSearchTerm + "%")
9 голосов
/ 18 февраля 2011

Все зависит от вашей БД.Это Postgres?MySQL?MongoDB?Что-нибудь еще?

С Postgres вы можете использовать что-то вроде:

Rails 2.x => Model.find(:all, :conditions=>["models.keywords ~= ?", 'crescent'])
Rails 3.x => Model.where("models.keywords ~= ?", 'crescent')

Вам просто нужно найти правильный синтаксис для вашей версии DB / Rails / ActiveRecord.

1 голос
/ 20 сентября 2018

У меня была похожая проблема. Мне нужно было увидеть, есть ли ключевые слова, переданные из контролируемого ввода в компоненте внешнего интерфейса, в теле любых вопросов в моей таблице вопросов. Вот как я это сделал в моем контроллере:

   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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...