在我的一个控制器中,我正在做:
user = User.find_or_initialize_by_email(@omniauth['info']['email'])
然后我需要知道是否找到或初始化了记录。我试过这个:
if user
else
end
但这不起作用,因为总会有一个用户。知道 find 或 initialize 是否已找到或已初始化的正确方法是什么?
谢谢
在我的一个控制器中,我正在做:
user = User.find_or_initialize_by_email(@omniauth['info']['email'])
然后我需要知道是否找到或初始化了记录。我试过这个:
if user
else
end
但这不起作用,因为总会有一个用户。知道 find 或 initialize 是否已找到或已初始化的正确方法是什么?
谢谢
您应该能够使用persisted?
:
if user.persisted?
edgeguides.rubyonrails.org说以下关于find_or_initialize_by
:
find_or_initialize_by 方法将像 find_or_create_by 一样工作,但它会调用 new 而不是 create。这意味着将在内存中创建一个新的模型实例,但不会保存到数据库中。
@pdoherty926 的答案的替代方法是使用该new_record?
方法。
if user.new_record?
它会返回相反的真实值persisted?
,因此您可以选择适合您的条件逻辑的值。(例如,我倾向于发现if
它比unless
有时更具可读性。)