【问题标题】:Ruby on Rails: Displaying ["A", "B"] IndividuallyRuby on Rails:单独显示 ["A", "B"]
【发布时间】:2026-02-24 14:00:02
【问题描述】:

当我使用 <%= b.category %>输出保存为checkbox(int:text)的数据时,输出 ["A", "B"]并被[]""包围,如下图。我希望能够单独显示。→A, B

【问题讨论】:

  • b.categoryArray,我猜?如果它代表属性列表,那不是一个很好的方法/数据库列名称;理想情况下,复数字段应该有一个复数名称,即b.categories,而不是b.category
  • 无论如何,像您描述的那样显示它的最简单方法是将数组元素加入String,用逗号分隔:<%= b.category.join(', ') %>
  • 或者您可能在问如何为每个类别创建一个单独的复选框?在这种情况下,循环遍历它们:<% b.category.each do |category| %>——这也是为什么为复数属性使用单数方法名称会令人困惑的原因。最好有这样的:<% b.categories.each do |category| %>
  • 好的,所以它实际上是 JSON(结构化字符串),而不是数组。你需要先调用 JSON.parse 。

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

您可以使用.join() 完成此操作。 Docs for Array.join()

我假设你只是混淆了复数情况。

<% categories_string = b.category.join(', ') %>
<%= categories_string %>

或者更简洁:

<%= b.category.join(', ') %>

【讨论】:

  • 感谢您的回答。对于“[\"A\", \"B\"]":String. 的未定义方法 `join' 出现错误
【解决方案2】:

如果您对更易于阅读的列表感兴趣,我会选择以下内容:

    arr = ["A","B","C"]
    last = arr.pop
    human_arr = arr.join(", ") + ", and " + last.to_s
    human_arr

给出:

    "A, B, and C"

我选择了牛津逗号,但这取决于你!

更新

正如 Stefan 所说,上面的代码被 to_sentence 方法所覆盖

【讨论】:

  • 或者直接使用to_sentence
  • @Stefan:哦,我真傻:这似乎“有点”快了。