Ruby on rails 验证表明列不是唯一的,但仍然可以';我找不到那个栏的记录
我有一个方法可以从facebook用户帐户创建用户。我验证Ruby on rails 验证表明列不是唯一的,但仍然可以';我找不到那个栏的记录,ruby-on-rails,ruby-on-rails-3,activerecord,activemodel,Ruby On Rails,Ruby On Rails 3,Activerecord,Activemodel,我有一个方法可以从facebook用户帐户创建用户。我验证电子邮件列以确保其唯一性 class User < ActiveRecord::Base validates :email, :'validators/email' => true, allow_nil: true, uniqueness:{ case_sensitive: false } 但是,这次的错误是undefined methodsave!'对于nil:NilClass`。由于验证表明电
电子邮件
列以确保其唯一性
class User < ActiveRecord::Base
validates :email,
:'validators/email' => true,
allow_nil: true,
uniqueness:{ case_sensitive: false }
但是,这次的错误是undefined method
save!'对于nil:NilClass`。由于验证表明电子邮件已经存在,我的finder应该返回一条现有的用户记录,但现在它返回零。这怎么可能发生
作为记录,我已经记录了错误,电子邮件是一个正确的电子邮件地址。这种情况大约每天发生一次,我自己无法复制。可能是这一行导致问题,因为如果找不到用户,它将返回nil,您没有引发异常,您正在记录异常
user=user.通过电子邮件查找(user.email)
您的代码非常复杂,您可以编写简单的代码来实现上述结果。是的,我知道是这一行,但我的问题是,当
无效时,为什么它可以返回nil?
是说数据库中已经存在电子邮件。您可以检查begin block上面的用户对象吗?请尝试放置调试器或撬动,它返回什么?使用user1=User。通过电子邮件(User.email)查找\u
和如果user1.nil?
def self.create_by_facebook()
user = User.new()
user.email = facebook_get_me()['email']
# new code
if user.invalid?
if user.errors[:email].join.include?('already registered') #custom msg
user = User.find_by_email(user.email)
if user.nil?
FacebookLogger.error(" no user is found by facebook email")
end
end
end
begin
user.save!
rescue ActiveRecord::RecordInvalid => e
raise
end
user
end