Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 验证表明列不是唯一的,但仍然可以';我找不到那个栏的记录_Ruby On Rails_Ruby On Rails 3_Activerecord_Activemodel - Fatal编程技术网

Ruby on rails 验证表明列不是唯一的,但仍然可以';我找不到那个栏的记录

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`。由于验证表明电

我有一个方法可以从facebook用户帐户创建用户。我验证
电子邮件
列以确保其唯一性

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