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