Rails搜索表单-不呈现结果



这一次太疯狂了,所以感谢您的帮助!

我有一个带索引的宠物控制器,一切都很好。现在,我想在索引中添加一个搜索表单,它将使用用户的查询来搜索数据库,而不是将@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。但该页面仍在渲染所有宠物。现在,如果我把params放在URL中,它运行良好,只显示我想要的内容:http://127.0.0.1:3000/pets?query=Lime

所以我的问题是,如果它正确地分配了@pets变量,为什么它仍然渲染所有宠物?为什么它只适用于URL中的params?我还是Rails的新手,所以我很感激你的耐心和帮助!

进一步澄清:

索引页。

当我提交查询时触发的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供参考。

我确信问题出在表格上。

已解决。我觉得问题出在表格上,所以我把它改成了这个,它起了作用:

<%= 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 %>

最新更新