在我的一个控制器中,我正在执行以下操作:
user = User.find_or_initialize_by_email(@omniauth['info']['email'])
然后,我需要知道是否找到或初始化了这些记录。我试过这个:
if user else end
但这并不管用,因为总会有用户。了解是否找到或初始化已找到或已初始化的正确方法是什么?
waxmsbnn1#
您应该能够使用persisted?:
persisted?
if user.persisted?
edgeguides.rubyonrails.org表示有关find_or_initialize_by的以下内容:FIND_OR_INITIALIZE_BY方法的工作方式与FIND_OR_CREATE_BY相同,但它将调用new而不是create。这意味着将在内存中创建新的模型示例,但不会将其保存到数据库。
find_or_initialize_by
vwkv1x7d2#
@pdoherty926答案的替代方法是使用new_record?方法。
new_record?
if user.new_record?
不过,它将返回与persisted?相反的真值,因此您可以选择哪个值适用于您的条件逻辑。(例如,我有时会发现if比unless更具可读性。)
if
unless
2条答案
按热度按时间waxmsbnn1#
您应该能够使用
persisted?
:edgeguides.rubyonrails.org表示有关
find_or_initialize_by
的以下内容:FIND_OR_INITIALIZE_BY方法的工作方式与FIND_OR_CREATE_BY相同,但它将调用new而不是create。这意味着将在内存中创建新的模型示例,但不会将其保存到数据库。
vwkv1x7d2#
@pdoherty926答案的替代方法是使用
new_record?
方法。不过,它将返回与
persisted?
相反的真值,因此您可以选择哪个值适用于您的条件逻辑。(例如,我有时会发现if
比unless
更具可读性。)