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

时间:2013-08-10 17:00:47

标签: ruby-on-rails ruby ruby-on-rails-3

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

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

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

if user
else
end 

但这不起作用,因为总会有用户。找到或初始化找到或初始化的正确方法是什么?

由于

2 个答案:

答案 0 :(得分:7)

您应该可以使用persisted?

if user.persisted?

edgeguides.rubyonrails.org说明以下关于find_or_initialize_by

的内容
  

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

答案 1 :(得分:3)

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

if user.new_record?

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