Я пытаюсь вернуть записи из двух таблиц базы данных (страницы и статьи), которые соответствуют каждому из слов в поисковом выражении. Вот мой запрос:Rails 4 возвращает записи из нескольких таблиц, соответствующих поисковому запросу
if params.has_key?('search_term')
words = params['search_term'].split(' ')
query = "
select
p.id
, p.title
, p.slug
, p.created_at
, p.content
, 'page' as type
from pages p
where 1 = 1
"
words.each do |word|
query << " and p.title like '%" << word << "%' or p.content like '%" << word << "%'"
end
query << "
union all
select
a.id
, a.title
, a.slug
, a.created_at
, a.content
, 'article' as type
from articles a
where 1 = 1
"
words.each do |word|
query << " and a.title like '%" << word << "%' or a.content like '%" << word << "%'"
end
@search_results = ActiveRecord::Base.connection.execute(query)
end
Во-первых, как я могу дезинфицировать значение word
внутри петли, чтобы предотвратить инъекции SQL атаки? Мне интересно, нужно ли еще дезинфицировать word
, потому что я уже разделил строку слова поиска.
Во-вторых, будет ли лучший способ приблизиться к тому, что я пытаюсь сделать? Я относительно новичок в Ruby/Rails, поэтому приветствовал бы любые указатели.
Заранее за вашу помощь.
Это работает хорошо. Спасибо за вашу помощь. –