在 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 验证仅在提交后有效

在 Rails 视图中循环遍历对象数组:意外行为

select2 在 form.submit 上清除了多项选择(ruby on rails)

循环遍历 JavaScript 对象数组并删除值

如何将两个属性作为 text_method 传递给 rails 中的 collection_select

Ruby on Rails 表单添加带有文本框的“其他”选项以选择下拉菜单