2015-11-22 2 views
0

Я создаю поиск рецептов, чтобы возвращать записи, которые соответствуют запросам нескольких ингредиентов. Например, если я буду вводить «Курица» и «Морковь», мои результаты должны возвращать только рецепты, содержащие курицу и морковь.Поиск записей, которые соответствуют нескольким поисковым запросам с помощью Ransack

Пока у меня есть поиск, который хорошо работает только с одним запросом. К сожалению, я не могу найти нигде в документации Ransack, как искать поиск с несколькими запросами.

def index 
if params[:query] 
    @q = Recipe.ransack(ingredients_name_cont: params[:query]) 
    @recipes = @q.result(distinct: true) 
else 
    @recipes = Recipe.all 
end 

render json: @recipes 
end 

Любые идеи? Благодаря!

EDIT: Чтобы добавить к описанию выше, я использую Rails в качестве моего API. Я не буду создавать шаблоны в Rails и поэтому не могу использовать никаких помощников формы.

РЕДАКТИРОВАТЬ 2: Если посмотреть на документы ближе (https://github.com/activerecord-hackery/ransack/wiki/basic-searching), кажется, что cont_any очень близок к тому, что мне нужно, за исключением того, что вместо возвращаемых записей, которые соответствуют одному или другому, мне нужно вернуть записи, соответствующие BOTH. Идеи?

+1

Вы должны использовать форматировщик ransack, ransack делает все волшебство за кулисами. Я отправлю код из моей функции поиска рецептов. –

ответ

1

Вы должны сделать поиск в контроллере, как это:

def search 
    @q = Recipe.ransack(params[:q]) 
    @recipes = @q.result(distinct: true).published.include_related_models 
    end 

И строить свою форму поиска, как это (в Haml в моем случае):

.container 
    %h3 Zoek recepten 
    = search_form_for @q, url: search_recipes_path do |f| 
    .input-group 
     = f.search_field :title_cont, class: 'form-control', placeholder: 'Uw zoekterm' 

Для вложенных отношений я нахожусь используя что-то вроде этого:

= f.collection_select(:recipe_categorizations_recipe_category_id_in, RecipeCategory.all, :id, :name,{}, {multiple: true, class: 'chosen-select form-control'}) 

Это для поиска РецептураКатегоризация модели recipe_categ ory_id (относящийся к RecipeCategory)

UPDATE: Так выглядят мои параметры [: q]. Вероятно, необходимо обратиться к правильным отношениям в именах параметров:

{"title_cont"=>"name", "recipe_categorizations_recipe_category_id_in"=>["", "4"], "ingredients_item_id_in_all"=>["", "2"], "steps_technique_id_in"=>["", "2"], "difficulty_in"=>"1"} 
+0

Спасибо за ответ! В моем случае я использую Rails в качестве API, поэтому я не буду создавать формы внутри Rails. –

+1

Но все же вы должны просто просто params [: q]. Только вам нужно убедиться, что структура, которую вы проходите, верна. Я могу опубликовать свои параметры [: q], если это поможет ... –

+0

Это было бы потрясающе :) –

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