Yan*_*dri 2 activerecord ruby-on-rails
根据文档,我知道它会检查对象是new_record还是is_destroyed,但是它是否仅根据对象的当前状态(例如已设置 id 或总体不为零)来执行此操作?或者它是否尝试执行查询以查看是否找到任何匹配的内容?
不,persisted?不查询数据库。它仅检查对象@destroyed或@new_record变量的值。
请参阅https://github.com/rails/rails/blob/6-1-stable/activerecord/lib/active_record/persistence.rb#L444
# Returns true if the record is persisted, i.e. it's not a new record and it was
# not destroyed, otherwise returns false.
def persisted?
!(@new_record || @destroyed)
end
Run Code Online (Sandbox Code Playgroud)
@new_record设置为true实例化对象时,然后false创建记录后。否则为零。对象被销毁后@destroyed设置为,否则为。truenil
此方法在任何时候都不会访问数据库。
如果这是您的目标,您可以使用exists?ID 查询数据库:
> User.exists?(user.id)
User Exists? (5.5ms) SELECT 1 AS one FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", "123"], ["LIMIT", 1]]
=> true
> User.exists?('321')
User Exists? (0.4ms) SELECT 1 AS one FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", nil], ["LIMIT", 1]]
=> false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |