gpt4 book ai didi

ruby-on-rails - RAILS : Does ActiveRecord#persisted? 实际查询数据库?

转载 作者:行者123 更新时间:2023-12-02 16:08:39 24 4
gpt4 key购买 nike

根据文档,我知道它会检查对象是 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

@new_record 在实例化对象时设置为 true,然后在创建记录后设置为 false。否则为零。 @destroyed在对象被销毁后设置为true,否则为nil

此方法绝不会访问数据库。

如果这是你的目标,你可以使用 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

关于ruby-on-rails - RAILS : Does ActiveRecord#persisted? 实际查询数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68654552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com