11

这是我的数据库中一项的示例:

Market id: 1, name: "Independence Park (Independently Run Farmers Market...", address: "3945 N. Springfield Ave., Chicago, IL", zipcode: "60618", created_at: "2013-01-01 21:22:24", updated_at: "2013-01-01 21:22:24"

我要做的就是列出我数据库中所有条目的 43 个邮政编码。为什么这些查询不起作用?

  1. Market.all.each { |m| m.zipcode }
  2. Market.all.zipcode
    • m = Market.all
    • m.each{ |m| m.zipcode }

谢谢!

4

3 回答 3

29

如果你想要的只是一组邮政编码,我建议你试试这个:

Market.pluck(:zipcode)
于 2013-01-03T16:39:42.643 回答
2

其他答案指出了做你想做的事情的正确方法,但没有解释为什么你的其他尝试不起作用(从技术上讲,这是你问的问题)。

尝试 1 和 3 不起作用的原因是它each不返回任何内容,它的唯一用途是遍历一组记录并对它们执行操作(例如更新它们或使用一些数据来调用外部服务) . 替换eachmap将修复它们,因为 map 使用块的返回值来返回值数组。这有一个缺点,因为它map是一个 Array 方法,因此必须先将所有记录加载到内存中,然后才能找到值。

尝试 2 不起作用,因为您尝试调用 ActiveRecord::Relation ( all) 上的字段名称,因此您最终会引发 NoMethodError。

最简洁的解决方案,也是已经指出的一个,是使用pluck,它不仅返回请求字段的所有值,而且在数据库查询级别这样做,所以你调用应该更有效。

于 2021-04-05T08:53:51.893 回答
1

您还可以执行以下操作,它会返回一个邮政编码数组:

Market.all.map(&:zipcode)

使用基准来确定哪个更好。

于 2013-01-03T17:01:10.337 回答