Какова стоимость / выгода object.models.find () по сравнению с Model.find () в Ruby on Rails (Mongoid) - PullRequest
0 голосов
/ 19 мая 2019

Я видел код, где вместо простого вызова Model.find(m_id) код использует тот факт, что модель belongs_to использует какой-то другой объект и формирует вызов следующим образом: object.models.find(m_id).Если у кого-то уже есть первичный ключ, и особенно, если этот первичный ключ проиндексирован, кажется, что это немного избыточно (и, возможно, немного дороже), чтобы использовать отношение «Model own_to object».

Единственное, что приходит на ум, - это то, что, ограничивая коллекцию, оперирующая находкой, имеет ценность для безопасности, но это кажется немного сомнительным.Итак, почему кто-то решил использовать object.models.find(m_id), когда можно просто позвонить Model.find(m_id)?

1 Ответ

2 голосов
/ 19 мая 2019

Когда вы используете 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 нет.

...