【问题标题】:In Rails 5, how do I iterate over an active record set?在 Rails 5 中,如何遍历活动记录集?
【发布时间】:2017-01-05 20:25:32
【问题描述】:

我正在使用 Rails 5。我在迭代一组活动记录时遇到了问题。我像这样访问它们

 priority_countries_ids = Country.where(:iso=>priority_countries).all
priority_countries_ids.each do |pc|

但是在“每个”行上,我得到了错误

can't quote Array

没有其他信息。我不知道如何解决这个问题,只是想遍历查询中的每个结果。

【问题讨论】:

    标签: ruby-on-rails arrays loops activerecord ruby-on-rails-5


    【解决方案1】:
    priority_countries: [["US", "United States"], ["CA", "Canada"]]
    

    问题是因为您的 priority_countries 不是一维数组。(http://edgeguides.rubyonrails.org/active_record_querying.html#retrieving-multiple-objects-in-batches)

    priority_countries_ids = Country.where(:iso=>priority_countries.flatten).all // 使用 flatten 将 priority_countries 转换为 1D。

    希望它能解决您的问题。

    【讨论】:

      【解决方案2】:

      你能打印 priority_countries 吗?你确定这是一个值数组吗? 试试

      Country.where(:iso=>priority_countries.to_a).all
      

      【讨论】:

      • Tnis 曾经在 Rails 4 中工作过,但尝试你的建议给了我同样的错误。当我在有问题的陈述之前添加 'puts "priority countries: #{priority_countries} class: #{priority_countries.class}"' 时,它会打印出 "priority countries: [["US", "United States"], [ "CA", "Canada"]] 类:数组"
      • country.iso 的类型是什么?是字符串还是数组?
      • 它是一个字符串(实际的 Postgres 9.5 列类型是“字符变化”)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多