5

在我的一个控制器中,我正在做:

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

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

if user
else
end 

但这不起作用,因为总会有一个用户。知道 find 或 initialize 是否已找到或已初始化的正确方法是什么?

谢谢

4

2 回答 2

9

您应该能够使用persisted?

if user.persisted?

edgeguides.rubyonrails.org说以下关于find_or_initialize_by

find_or_initialize_by 方法将像 find_or_create_by 一样工作,但它会调用 new 而不是 create。这意味着将在内存中创建一个新的模型实例,但不会保存到数据库中。

于 2013-08-10T17:03:24.127 回答
4

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

if user.new_record?

它会返回相反的真实值persisted?,因此您可以选择适合您的条件逻辑的值。(例如,我倾向于发现if它比unless有时更具可读性。)

于 2013-08-10T17:52:13.050 回答