Ral*_*var 3 activerecord ruby-on-rails
我有两个实例变量:@var_from_new和@var_from_find_by。
@var_from_new是由
@var_from_new = EmailAddress.new
Run Code Online (Sandbox Code Playgroud)
@var_from_find_by是由
@var_from_find_by.find_by_email_address(email_address_params[:email_address])
Run Code Online (Sandbox Code Playgroud)
当我用调试器检查这两个变量时,两个实例变量都包含完全相同的内容。然而
@var_from_new.persisted? # false
@var_from_find_by.persisted # true
Run Code Online (Sandbox Code Playgroud)
Rails 怎么知道的?
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
Run Code Online (Sandbox Code Playgroud)
现在很明显,persisted?使用了一个@new_record您可能在调试器中没有看到/注意到的实例变量。
(此代码pry通过pry-rails使用 gem)
| 归档时间: |
|
| 查看次数: |
1670 次 |
| 最近记录: |