Панель поиска функций Ruby

#ruby-on-rails #ruby #search

Вопрос:

У меня возникли проблемы с функцией панели поиска, я хочу, чтобы она выполняла поиск по атрибуту моей модели рецептов «ингредиенты». Когда я ввожу этот код, он не дает мне никаких результатов, только пустая страница рецептов после поиска. Любая помощь была бы очень кстати. У меня есть ингредиенты в виде текста внутри таблицы рецептов.

это содержится в рецепте index.html

     <%= form_for "", url: recipes_path, role: "search", method: :get do %>
<%= text_field_tag :search, @search_term, placeholder: "Seach..." %>
 

<% конец %>

это контроллер рецептов

   def index
  @recipes = Recipe.all
  # @recipes =Recipe.search(params[:search])

  if params[:search]
    @search_term = params[:search]
    @recipes = @recipes.search_by(@search_term)
  end
 

конец

это функция модели рецептов

 def self.search_by(search_term)
 where("LOWER(ingredients) LIKE :search_term OR LOWER(title) LIKE :search_term",
 search_term: "%{search_term.downcase}%")
end
 

Также это командная строка, когда я выполняю поиск:

 Started GET "/recipes?search=chicken" for 127.0.0.1 at 2021-07-09 07:52:57 -0400
Processing by RecipesController#index as HTML
  Parameters: {"search"=>"chicken"}
  Rendering layout layouts/application.html.erb
  Rendering recipes/index.html.erb within layouts/application
  User Load (0.1ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 3], ["LIMIT", 1]]
  ↳ app/views/recipes/index.html.erb:13
  Recipe Load (0.2ms)  SELECT "recipes".* FROM "recipes" WHERE (LOWER(ingredients) LIKE '%{search_term.downcase}%' OR LOWER(title) LIKE '%{search_term.downcase}%')
  ↳ app/views/recipes/index.html.erb:70
  Rendered recipes/index.html.erb within layouts/application (Duration: 5.0ms | Allocations: 2463)
[Webpacker] Everything's up-to-date. Nothing to do
  Rendered layouts/_alerts.html.erb (Duration: 0.1ms | Allocations: 41)
  Rendered layout layouts/application.html.erb (Duration: 11.0ms | Allocations: 7781)
Completed 200 OK in 12ms (Views: 11.1ms | ActiveRecord: 0.3ms | Allocations: 8360)
 

Кто-нибудь знает, почему он не просматривает ингредиенты рецептов? Заранее спасибо.

Комментарии:

1. это должно быть: Recipe.search_by , верно ? и вы могли бы использовать form_tag или form_with вместо form_for

2. Я просто изменил модель, используя вместо этого рецепты и тег form_tag, и это все еще не дает мне никаких результатов, мне интересно, почему он ничего не отображает. form_with выдает ошибку, поэтому я не могу ее использовать.

Ответ №1:

Интерполяция в методе search_by неверна.
Вы написали "%{search_term.downcase}%" , когда это правильно "%#{search_term.downcase}%" . Пропустил # !

 def self.search_by(search_term)
    where("LOWER(ingredients) LIKE :search_term OR LOWER(title) LIKE :search_term",
    search_term: "%#{search_term.downcase}%")
end