Схожу с ума по этому, так что спасибо за любую помощь!
У меня есть 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 в форме.