使用Rails Find_or_Initialize_by_Email,如何确定记录是否找到或初始化?

nvbavucw  于 2022-10-15  发布在  Ruby
关注(0)|答案(2)|浏览(118)

在我的一个控制器中,我正在执行以下操作:

user = User.find_or_initialize_by_email(@omniauth['info']['email'])

然后,我需要知道是否找到或初始化了这些记录。我试过这个:

if user
else
end

但这并不管用,因为总会有用户。了解是否找到或初始化已找到或已初始化的正确方法是什么?

waxmsbnn

waxmsbnn1#

您应该能够使用persisted?

if user.persisted?

edgeguides.rubyonrails.org表示有关find_or_initialize_by的以下内容:
FIND_OR_INITIALIZE_BY方法的工作方式与FIND_OR_CREATE_BY相同,但它将调用new而不是create。这意味着将在内存中创建新的模型示例,但不会将其保存到数据库。

vwkv1x7d

vwkv1x7d2#

@pdoherty926答案的替代方法是使用new_record?方法。

if user.new_record?

不过,它将返回与persisted?相反的真值,因此您可以选择哪个值适用于您的条件逻辑。(例如,我有时会发现ifunless更具可读性。)

相关问题