我已经看到了代码,其中代码不只是调用Model.find(m_id)
,而是使用模型belongs_to
和其他对象并以这种方式形成调用的事实:object.models.find(m_id)
。如果一个人已经有了主键,特别是如果该主键已被索引,则使用“模型属地到对象”关系似乎有点多余(也许会贵一些)。
唯一想到的是,通过限制查找操作所依据的集合,它具有安全性,但似乎有些微不足道。那么,为什么有人会只打电话给object.models.find(m_id)
时选择使用Model.find(m_id)
?
答案 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没有此消息。