从db列创建数组的最快方法是什么?

Fli*_*lip 2 ruby arrays ruby-on-rails-4

我需要将ActiveRecord模型的数据库列的所有元素放入一个数组中.我这样做:

code_array = []
Language.all.each do |lang|
  code_array<<lang.code
end

=> ["af", "sq", "ar", "hy", "az", "eu", "be", "bn", "bs", "bg", "ca", "ceb", "ny", "zh-CN", "zh-TW", "hr", "cs", "da", "nl", "en", "eo", "et", "tl", "fi", "fr", "gl", "ka", "de", "el", "gu", "ht", "ha", "iw", "hi", "hmn", "hu", "is", "ig", "id", "ga", "it", "ja", "jw", "kn", "kk", "km", "ko", "lo", "la", "lv", "lt", "mk", "mg", "ms", "ml", "mt", "mi", "mr", "mn", "my", "ne", "no", "fa", "pl", "pt", "ma", "ro", "ru", "sr", "st", "si", "sk", "sl", "so", "es", "su", "sw", "sv", "tg", "ta", "te", "th", "tr", "uk", "ur", "uz", "vi", "cy", "yi", "yo", "zu"]
Run Code Online (Sandbox Code Playgroud)

但是,更优雅和/或更少的代码必须有可能吗?

mcf*_*gan 6

你正在寻找的方法是采摘

Language.pluck(:code)
Run Code Online (Sandbox Code Playgroud)

即使您不使用pluck,您也可以通过更改以下内容来显着改进代码:

code_array = []
Language.all.each do |lang|
  code_array<<lang.code
end
Run Code Online (Sandbox Code Playgroud)

至

Language.all.map(&:code)
Run Code Online (Sandbox Code Playgroud)

您的代码迭代所有结果,获取字段code并将其推送到数组,然后移动到下一个元素.将函数映射到集合或数组通常更有效.

  • 您提出的改进纯粹是美学.基础业务仍然相同.意思是,它不是"更有效". (3认同)