Как создать маршрут, который позволит мне выполнять поиск по ключевым словам и отображать результаты (кроме значений по умолчанию) - PullRequest
0 голосов
/ 30 марта 2020

В рамках курса я создаю приложение для поиска рецептов по http://www.recipepuppy.com/?i=chocolate&q= по ключевому слову, возвращаю массив хэшей с элементами, которые я хочу для каждого рецепта (уменьшенное изображение, название, ингредиенты) и отобразить все рецепты, найденные в таблице. Я успешно обработал таблицу для поиска по умолчанию «шоколад». Теперь мне нужно создать маршрут, который позволит мне ввести поисковый запрос (например, хлеб) в URL: http://localhost: 3000 /? Search = bread .

У меня есть следующий контроллер:

class RecipesController < ApplicationController
  def index
    @search = params[:looking_for] || 'chocolate'
    @recipes = Recipe.for(@search)
  end
end

Я не могу понять, как создать маршрут, который позволит мне искать другие ключевые слова и отображать результаты. Я не уверен, нужно ли мне что-то добавить в контроллер, или только маршруты или оба?

РЕДАКТИРОВАТЬ

Это тест rspe c, который я не могу пройти:

it "displays page for alternate search term (bread)" do
    visit "recipes/index?search=bread"
    expect(page).to have_content 'Our Daily Bread in a Crock - Weekly Make and Bake Rustic Bread'   
  end

Заранее спасибо!

1 Ответ

0 голосов
/ 30 марта 2020

, поэтому, если мы посмотрим на этот URL, у нас будут разные части

 http://localhost:3000/search?keyword=bread

http://localhost:3000 - это базовый URL

/search - это путь, а

?keyword=bread - это то, что мы называем строкой запроса (все после ? в URL-адресе)

Теперь, когда вы отображаете форму поиска, это то, для чего вам нужно создать маршрут, так что индекс для рецептов) .

# routes.rb
resources :restaurants, only: :index

Там вы отображаете форму. Теперь важно, чтобы

  1. это форма, которая выдает GET-запрос
  2. , этот запрос на получение будет go до recipes#index тоже

После того, как вы отправите форму, она присоединит строку запроса к URL, и вы сможете обработать ее в контроллере.

Форма может выглядеть примерно так (вы должны использовать помощник по формам)

# views/recipes/index.html.erb
<form action="/recipes" method="get">
  <input type="text" name="keyword" placeholder="What are you looking for?">
  <input type="submit">
</form>

Тогда входящий http-запрос будет иметь следующий URL-адрес

GET /recipes?keyword=something_you_typed

И в контроллере вы можете обрабатывать его так:

# controllers/recipes_controller.rb
  def index
    if params[:keyword]
      @recipes = Recipe.where(name: params[:keyword])
    else
      @recipes = Recipe.all
    end
  end
...