ruby-on-rails - Rails - 给定一组用户 - 如何仅获得电子邮件的输出?

标签 ruby-on-rails ruby-on-rails-3

我有以下几点:

@users = User.all

用户有几个字段,包括电子邮件。

我希望能够做的是获取所有@users 电子邮件的列表。

我试过:
@users.email.all but that errors w undefined

想法?谢谢

最佳答案

(根据大众需求,作为真实答案发布)

我不喜欢什么 fl00r's solution是它为数据库中的每个记录实例化一个新的用户对象;这只是不缩放。对于只有 10 封电子邮件的表来说,这很棒,但是一旦您开始处理数千封电子邮件,您就会遇到问题,主要是 Ruby 的内存消耗。

可以通过在模型上使用 connection.select_values 和一点 ARel 优点来解决这个小问题:

User.connection.select_values(User.select("email").to_sql)

这将为您提供来自数据库的电子邮件地址的直字符串。不关心用户对象,并且比直的 User.select("email") 更好地扩展查询,但我不会说这是“最佳规模”。可能有更好的方法来做到这一点,但我还不知道。

重点是:一个String对象将使用比 User 更少的内存对象,因此您可以拥有更多对象。这也是一个更快的查询,并且不会走很长的路(运行查询,然后映射值)。哦,还有 map也需要更长的时间。

如果您使用的是 Rails 2.3 ...

那么你将不得不手动构建 SQL,我很抱歉地说。
User.connection.select_values("SELECT email FROM users")

只是提供了 Rails 3 提供的帮助程序的另一个示例。

关于ruby-on-rails - Rails - 给定一组用户 - 如何仅获得电子邮件的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160232/

相关文章:

ruby-on-rails - rails 6 : How can I run validations on an ActiveStorage item outside of the model?

ruby-on-rails - Rspec 'cannot load such file'

ruby-on-rails - 在 Rails 3 中为每个普通查询运行额外的计数查询。如何解决这个问题

ruby-on-rails - 在 Centos 6.3 上运行 'rails s' 时出现 'Could not find a JavaScript runtime.' 错误

ruby - 需要多对多和 habtm-checkboxes 帮助!

jquery - Rails 4,acts_as_commentable,删除按钮/链接

ruby-on-rails - 在mongodb中的文档中删除字段-Rails + Mongoid

ruby-on-rails - Rails ActiveRecord 和原始类型数组

ruby-on-rails - Bundler 找不到 gem "activerecord": 的兼容版本

ruby-on-rails - Rails 中的 Kerberos 身份验证