我有两个实例变量: @var_from_new 和 @var_from_find_by 。
@var_from_new 由
创建@var_from_find_by.find_by_email_address(email_address_params[:email_address])
@var_from_find_by 由
创建@var_from_new.persisted? # false
@var_from_find_by.persisted # true
当我用调试器检查两个变量时,两个实例变量都包含完全相同的内容。然而
{{1}}
Rails如何知道?
答案 0 :(得分:4)
Rails如何知道?
一个记录是从数据库加载的,另一个是在内存中初始化但尚未保留。它们对于大多数字段可能具有相同值的事实是无关紧要的。如果您在询问,rails正在做什么,以下是您可以找到的方法:
[1] pry(main)> show-source EmailAddress#persisted?
From: /Users/sergio/.gem/ruby/2.4.2/gems/activerecord-5.1.5/lib/active_record/persistence.rb @ line 98:
Owner: ActiveRecord::Persistence
Visibility: public
Number of lines: 4
def persisted?
sync_with_transaction_state
!(@new_record || @destroyed)
end
现在很明显,persisted?
使用了一个实例变量@new_record
,您可能在调试器中没有看到/注意到它。
(此代码通过pry-rails使用gem pry
)