RAILS: ActiveRecord#persisted 吗?实际查询数据库?
RAILS: Does ActiveRecord#persisted? actually queries the database?
根据文档,我知道它会检查对象是 new_record 还是 is_destroyed,但它是否仅基于对象的当前状态(例如已设置 id 或总体上不是 nil)来执行此操作?或者它是否尝试执行查询以查看是否找到任何匹配项?
否,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" = LIMIT [["id", "123"], ["LIMIT", 1]]
=> true
> User.exists?('321')
User Exists? (0.4ms) SELECT 1 AS one FROM "users" WHERE "users"."id" = LIMIT [["id", nil], ["LIMIT", 1]]
=> false
根据文档,我知道它会检查对象是 new_record 还是 is_destroyed,但它是否仅基于对象的当前状态(例如已设置 id 或总体上不是 nil)来执行此操作?或者它是否尝试执行查询以查看是否找到任何匹配项?
否,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" = LIMIT [["id", "123"], ["LIMIT", 1]]
=> true
> User.exists?('321')
User Exists? (0.4ms) SELECT 1 AS one FROM "users" WHERE "users"."id" = LIMIT [["id", nil], ["LIMIT", 1]]
=> false