【问题标题】:Rails, Mongoid and complex queryRails,Mongoid和复杂查询
【发布时间】:2012-08-23 16:52:37
【问题描述】:

用户拥有_many 个项目 物品属于_客户

使用 mongoid(我不认为它是特定于 mongoid 的,但无论如何)我需要按给定用户收集所有客户端。目前我使用:

@clients = current_user.items.map{|c| c.client}

但肯定不好,也不可接受。最好的实施方式是什么?

【问题讨论】:

  • 这并不可怕。但是,最好通过一些伪代码来描述您希望最终语法的样子。基本上听起来你想在你的代码中应用一些语法糖,并有更清晰的代码,可能是这样的:clients = user.all_clients
  • 首先,因为结果是有一个数组,它不是很方便。其次,我不确定,但我认为有大量的记录,把它放在 ruby​​ 的肩膀上不是很好吗? (再次,它是 mongodb)
  • 知道了,我想你有几个选择,要么手工制作一个 SQL 语句来做你想做的事,要么使用 ActiveRecord 包含(急切加载)。在两者之间做出决定可能是特定于应用程序的。 link 查看 Eager Loading 部分

标签: ruby-on-rails ruby-on-rails-3 mongoid


【解决方案1】:

为了不遇到 N+1 问题,我会这样做。

# first you retrieve all client ids
ids = current_user.items.map(&:client_id)

# then you retrieve all clients at once
@clients = Client.in(id: ids)

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 2013-05-22
    • 2013-05-31
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多