Mongoid:在父级及其子类中急切加载关系

时间:2014-01-03 13:56:40

标签: ruby-on-rails mongoid eager-loading

我在mongoid中使用子类,我希望加载父类及其子类的加载关系。

class Event
   include Mongoid::Document
   belongs_to :modifier
end

class Fixture < Event
   belongs_to :club
end

当我运行Event.includes(:modifier, :club)时,我得到:

Mongoid::Errors::InvalidIncludes:
Problem:
Invalid includes directive: Event.includes(:modifier, :club)
Summary:
Eager loading in Mongoid only supports providing arguments to 
Event.includes that are the names of relations on the Event model, 
and only supports one     level of eager loading. (ie, eager
loading associations not on the Event but one step away via 
another relation is not allowed.
Resolution:
Ensure that each parameter passed to Event.includes is a valid name
of a relation on the Event model. These are: "modifier".

错误消息是合理的,但我想知道是否有解决方法,没有在每个类上运行单独的查询?

我希望能够链接更多标准,即Event.includes(:modifier, :club).desc(:updated_at),而不是在rails中对结果数组进行排序。

版本:Mongoid v3.16&amp; Rails 3.2.15


编辑:我最好让它更清楚我想要的是什么。

我想要所有活动和所有灯具文件。 我也想要他们所有的关系:事件和赛程的修改器,以及夹具上的球杆。 我希望一次性从mongo中检索那些相关文档,即通常使用'.includes()'方法通过'eager loading'完成。 还有一些子类,即class Election < Eventsclass Seminar < Events。所以我想避免分别查询每个子类。 我还希望链接更多标准,例如desc(:updated_at)

2 个答案:

答案 0 :(得分:0)

我不确定你尝试做什么,但我想这可以解决你的问题。

Event.where(:modifier_id.ne => nil, :club_id.ne => nil).desc(:updated_at)

如果这对你有用,请告诉我。

答案 1 :(得分:0)

到目前为止,MongoID不支持嵌套文档急切加载。您最好检查一下gem