我们最近从rails 3.2.3迁移到Rails 3.2.5,我们正在使用Devise 2.0.4。在我们的应用程序中,我们覆盖了Devise控制器,只是为了利用omniauth和devise。
当我们在Sign_UP上使用3.2.3版本时,一旦我们迁移到3.2.5 resource.save 停止工作,它一切正常,它没有显示任何失败或成功消息,只是重定向到sign_in页面
之后我尝试了 resource.save!,这样我就可以得到确切的erorr,它会出现以下错误消息,但这不是真的,因为在Table中没有这样的记录,甚至是当前的内容也未保存
Completed 500 Internal Server Error in 1626644ms
ActiveRecord::RecordInvalid (Validation failed: User name has already been taken):
我也尝试过Devise 2.1并得到了相同的结果。
答案 0 :(得分:0)
我找到了问题区域。但这有点奇怪 在我们当前工作的Rails 3.2.3应用程序中,我们在模型中进行了验证,这在Rails 3.2.5中失败了
validates :user_name, :uniqueness => true
原因是 - 表中的User_name为“nil”已经可用,当下次我们尝试将“user_name”作为NIL插入时,它会检查NIL的唯一性并在那里失败。
为了解决这个问题,我添加了:allow_nil选项,但我的问题仍然是为什么它没有为rails 3.2.3失败
validates :user_name, :uniqueness => true, :allow_nil => true