这一次太疯狂了,所以感谢您的帮助!
我有一个带索引的宠物控制器,一切都很好。现在,我想在索引中添加一个搜索表单,它将使用用户的查询来搜索数据库,而不是将@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 %>