【问题标题】:Ignoring certain field when querying in Rails and ActiveRecord在 Rails 和 ActiveRecord 中查询时忽略某些字段
【发布时间】:2015-03-03 13:13:59
【问题描述】:

我知道我可以指定某些字段来使用pluck查询数据库。

ids = Item.where('due_at < ?', 2.days.from_now).pluck(:id)

但是我想知道,是否有办法指定我想避免从数据库中查询的某些字段。某种反采摘?

  posts = Post.where(published: true).do_not_lookup(:enormous_field)

【问题讨论】:

  • Item.where('due_at

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord


【解决方案1】:

Model#attribute_names 应该返回列/属性数组。您可以排除其中一些并传递给pluck 或select 方法。

类似这样的:

posts = Post.where(published: true).select(Post.attribute_names - ['enormous_field'])

【讨论】:

  • 不是真的,pluck 在后台使用select,它只是将结果作为数组返回,而select 作为记录返回。
  • @tompave 这家伙不同意。超过 90% 的采摘速度更快:gavinmiller.io/2013/getting-to-know-pluck-and-select
  • Pluck 至少快 3 倍,但你得到的是一个数组,而不是活动记录对象。
  • pluck 更快,因为它从数据库中提取特定列,然后停止并直接将它们作为数组返回。另一方面,select 将执行 pluck 使用的 same 查询,但将返回 ActiveRecord::Relation。然后可以将此关系转换为完整记录的数组。缓慢的部分是转换为ActiveRecord::Base
猜你喜欢
  • 2017-07-04
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
相关资源
最近更新 更多