Ruby on Rails(Mongoid)中object.models.find()与Model.find()的成本/收益是什么?

时间:2019-05-19 15:07:51

标签: ruby-on-rails mongodb mongoid

我已经看到了代码,其中代码不只是调用Model.find(m_id),而是使用模型belongs_to和其他对象并以这种方式形成调用的事实:object.models.find(m_id)。如果一个人已经有了主键,特别是如果该主键已被索引,则使用“模型属地到对象”关系似乎有点多余(也许会贵一些)。

唯一想到的是,通过限制查找操作所依据的集合,它具有安全性,但似乎有些微不足道。那么,为什么有人会只打电话给object.models.find(m_id)时选择使用Model.find(m_id)

1 个答案:

答案 0 :(得分:2)

使用Model.find(m_id)时,只需按其主键即可找到模型。

使用object.models.find(m_id)时,可以通过主键在对象的集合中找到模型。

例如,您有:

class User < ApplicationRecord
  has_many :messages
end

class Message < ApplicationRecord
  belongs_to :user
end

您有:

#<Message id: 1, user_id: 1>

现在,如果您致电Message.find(1),则会收到该消息。

但是当您致电User.find(2).messages.find(1)时,您会得到

ActiveRecord::RecordNotFound

因为用户#1收到此消息,但用户#2没有此消息。