在 Rails 中循环遍历 form.select(使用 Elastic Search/Searchkick aggs)
Posted
技术标签:
【中文标题】在 Rails 中循环遍历 form.select(使用 Elastic Search/Searchkick aggs)【英文标题】:Stuck on looping through a form.select in Rails (using Elastic Search/Searchkick aggs) 【发布时间】:2021-12-09 09:11:59 【问题描述】:我完全卡在 Rails 中的 form.select 循环中(使用 Elastic Search/Searchkick aggs)。
当我不预先挂起 form.select 帮助器时,我可以访问“bucket”数组(因此也可以访问“key”和“doc_count”),但是当它存在时它不会循环遍历。不知道我将如何动态获取选项!
有谁知道可能出了什么问题(忽略 link_to 的东西,一旦我能得到实际的“密钥”,我就会改变它)?也许我错误地使用了 form.select 助手?谢谢!
<% form.select @jobs.aggs["location"]["buckets"].each do |bucket| %>
<% if params[:location] == bucket["key"].to_s %>
<strong><%= link_to bucket["key"], request.params.except(:location)%></strong>
<% else %>
<%= link_to bucket["key"], request.params.merge(location: bucket["key"])%>
<% end %>
<% end %>
【问题讨论】:
尝试在您的控制器中打印puts @jobs.aggs["location"]["buckets"]
,确保您正确访问阵列。
@ricks 感谢您的回复!我已经通过在每个之后提出来尝试这个,并将它放在我的控制器中并检查本地主机日志,并且它正在正确打印它。不幸的是,它仍然在说 |bucket| (或每个循环中的其他任何内容,无论是“key”、“doc_count”等)为 nil。
【参考方案1】:
我想通了!这是我的语法错误,因为我忘记在 form.select 的第一部分中使用 :location,并且在此之后没有将块包装在 [] 括号中(大概选项必须在数组中或使用此助手进行哈希处理)。
这是为我解决这个问题的代码(简化):
<% form.select :location, [@jobs.aggs["location"]["buckets"].each do |bucket| %>
<%= bucket["key"] %>
<% end ] %>
【讨论】:
以上是关于在 Rails 中循环遍历 form.select(使用 Elastic Search/Searchkick aggs)的主要内容,如果未能解决你的问题,请参考以下文章
Rails 5 - form.select 上的 jQuery 验证仅在提交后有效
select2 在 form.submit 上清除了多项选择(ruby on rails)