2014-12-25 7 views
1

Я имею эту простую функцию поиска:Rails 4 функция поиска

class SearchController < ApplicationController 
def index 
    if params[:search].blank? 
     redirect_to root_path 
    else 
     @results = Post.search(params[:search]) 
    end 
    end 
end 

Я хочу реализовать следующие функциональные возможности, но я борюсь с кодом:

1.How для записи каждого из терминов ввода поиска и посмотрите, являются ли поисковые термины наиболее обыденными. Я думал об использовании «first_or_create» метода ...

2.give У меня это название: «Питер Пол Мэри», как я разделить их и link_to каждый терминов для поиска функции поиска с

Пожалуйста посоветуйте.

ответ

1

1.I думаю, вы можете использовать двумерный массив, содержащий результаты запроса для каждого отдельного термина.

@maching_posts = Array.new 
@terms = params[:search].split 

@terms.each do |term| 
    result = Post.where(title: term) 
    @maching_post << result 
end 

Теперь у вас есть массив «@maching_post», содержащий результаты запроса для каждого отдельного термина. Строка [0] содержит результат первого слагаемого и т. Д.

Вы можете использовать этот массив для генерации представления. Пример:

<% @terms.each_with_index do |term, index| %> 
    <span>Results of <%= term %></span> 
    <% @maching_post[index].each do |post| %> 
    <%= post.title %></br> 
    <% end %> 
<% end %> 

2.Чтобы получить отдельные слова из строки, вы можете использовать метод split().

 "Peter Paul Mary".split 

Этот метод возвращает массив [ "Питер", "Пол", "Мэри"] Чтобы связать каждый член, используйте

link_to 'term', controller: :search, action: :index, search: 'term' 

Вы должны использовать этот метод в цикле, как

<% "Peter Paul Mary".split.each do |term| %> 
    <%= link_to term, controller: :search, action: :index, search: term %> 
<% end %> 
+0

Благодарим вас за связь link_to, она отлично работает. Но мой первый вопрос просто хочет рассчитать условия поиска, введенные пользователями, я не собирался сортировать сообщения. Например. если пользователи ищут «mary peter», «mary Paul», «peter mary», ясно, что mary занимает первое место, а peter занимает второе место. Должен ли я создать для этого конкретную модель? Пожалуйста, порекомендуйте. –

+0

Извините за мою ошибку. Я улучшил код. Вам не нужно создавать новую модель. Управление запросами - задача контроллера –

Смежные вопросы