ruby-on-rails 检查Rails视图中的数组中是否存在元素

cu6pst1q  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(169)

我在尝试检查Rails应用程序中的数组中是否存在字符串时遇到了一个问题。包括?方法似乎给出了意想不到的结果。
我有一个名为@categories的数组,它包含一个字符串列表,如[“poverty”,“hunger”]。我试图使用这个数组来预先选择复选框的形式的基础上是否选择的价值观,最后一次。
在这段代码中,我打印了值@categories,@categories&.include?(un_kind[1])和un_kind[1],它们给予我以下各自的值:[“贫穷”,“饥饿”]虚假贫穷

  1. <%= @categories %>
  2. <% Array(t("#{cat_l}.enums.un_kind").invert).each do |un_kind| %>
  3. <%= @categories&.include?(un_kind[1]) %>
  4. <%= un_kind[1] %>
  5. <div class="form-check">
  6. <%= check_box_tag "un_kind[]", un_kind[1], @categories&.include?(un_kind[1]), class: 'form-check-input' %>
  7. <%= label_tag "un_kind_#{un_kind[1]}", un_kind[0], class: 'form-check-label' %>
  8. </div>
  9. <% end %>
zf9nrax1

zf9nrax11#

这里的问题是字符串与符号的问题。您将从i18n区域设置查找中获取un_kind[1],这意味着它将是:poverty而不是"poverty"。因此:

  1. > ["poverty", "hunger"].include? :poverty
  2. false

. as opposed to:

  1. > ["poverty", "hunger"].include? "poverty"
  2. true

这里令人困惑的部分是,当您打印一个符号时,它会自动转换为字符串形式。这就是为什么通常在调试时,最好在要打印的对象上使用inspect,这通常会让您给予更好的可见性。
我相信你已经走在我前面了,简单的修复方法是.to_s你的un_kind[1]对象:@categories&.include?(un_kind[1].to_s)

相关问题