Форма поиска Rails - не рендеринг результатов - PullRequest
0 голосов
/ 27 марта 2020

Схожу с ума по этому, так что спасибо за любую помощь!

У меня есть PetsController с индексом, все работает нормально. Теперь я хотел добавить поисковую форму в индекс, который вместо назначения @pets для Pet.all будет искать в БД по запросу пользователя, например:

def index
    if ...
      ...
    elsif params[:query]
      @pets = Pet.where("name ~ ?", "#{params[:query]}")
    else
      ...
    end
  end

и форма выглядит например:

<%= form_with(url: '/pets', method: "get") do  %>
  <%= text_field_tag :query %>
  <%= submit_tag 'Submit' %>
<% end %>

Если я уроню привязку внутри elsif, я увижу, что действительно нажимаю на нее, и она возвращает правильные результаты и присваивает ей @pets. Но страница по-прежнему отображает всех домашних животных. Теперь, если я добавлю параметры в URL, он будет работать нормально и покажет мне только то, что я хочу: http://127.0.0.1:3000/pets?query=Lime

Поэтому мой вопрос: если он правильно присваивает переменную @pets, почему все еще рендеринг всех домашних животных? И почему он работает только с параметрами в URL? Я все еще довольно новичок в Rails, поэтому я ценю ваше терпение и помощь!

Для дальнейшего разъяснения:

Страница указателя.

The SQL, которое срабатывает при отправке запроса ('Fido'), похоже, работает:

Rendering pets/index.html.erb within layouts/application
  Pet Load (1.5ms)  SELECT "pets".* FROM "pets" WHERE (name ~ 'Fido')
  ↳ app/views/pets/_pets.html.erb:23
  Owner Load (0.3ms)  SELECT "owners".* FROM "owners" WHERE "owners"."id" = $1 LIMIT $2  [["id", 8], ["LIMIT", 1]]
  ↳ app/models/pet.rb:11:in `name_with_owner'
  Rendered pets/_pets.html.erb (Duration: 5.6ms | Allocations: 1472)
  Rendered pets/index.html.erb within layouts/application (Duration: 6.2ms | Allocations: 1657)

Однако страница не отображается и остается прежней.

Github для справки .

Я вполне уверен, что проблема l ie в форме.

1 Ответ

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

решаемая. У меня было чувство, что проблема была с формой, поэтому я немного изменил ее, и она сработала:

<%= form_tag('/pets', method: 'get') %>
  <%= text_field_tag :query %>
  <%= submit_tag 'Submit' %>

Также работает form_with в следующем контексте:

<%= form_with(url: '/pets', local: true, method: 'get') do |f| %>
  <%= f.label :query, 'Enter Name to Search' %>
  <%= f.text_field :query %>
  <%= f.submit 'Search' %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...