Rails:如何坚持下去?工作?

时间:2018-03-24 18:29:19

标签: ruby-on-rails activerecord

我有两个实例变量: @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如何知道?

1 个答案:

答案 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