【问题标题】:Ruby on Rails. Can't create a record in databaseRuby on Rails。无法在数据库中创建记录
【发布时间】:2015-06-10 11:13:41
【问题描述】:

在数据库中创建新记录时遇到问题。
模型目前看起来像这样:

class User < ActiveRecord::Base
      VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i

      before_save {!self.email.downcase}

      validates :name, presence: true, length: {maximum: 50}
      validates :email, presence: true, length: {maximum: 255}, format: {with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false}

      has_secure_password
      validates :password, presence: true, length: {minimum: 6}
end

最初尝试从代码创建记录,但失败且没有任何错误。 作为下一步,我尝试在控制台中手动创建记录,但结果仍然相同。没有可用的错误。跳过验证、重置数据库、重新启动服务器或从验证中排除电子邮件 REGEXP(对我来说总是一个麻烦的来源)无济于事......

user = User.new(name: "Fedor U", email: "fredy@mail.ru", password: "asdzxc123", password_confirmation: "asdzxc123")
=> #<User id: nil, name: "Fedor U", email: "fredy@mail.ru", created_at: nil, updated_at: nil, password_digest: "$2a$10$89SABxu2lOo3gj6DiqLZEOlSheAfEk0ex.5GYmJ5e8i...">

>> user.save
(0.2ms)  begin transaction
User Exists (0.2ms)  SELECT  1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('fredy@mail.ru') LIMIT 1
(0.1ms)  rollback transaction
=> false
>> user.errors.any?
=> false
user.errors.full_messages
=> []

>> user.save(validation: false)
(0.1ms)  begin transaction
User Exists (0.2ms)  SELECT  1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('fredy@mail.ru') LIMIT 1
(0.1ms)  rollback transaction
=> false

任何想法我做错了什么? Rails 4.2.0,bcrypt 3.1.7。
目前数据库为空。

【问题讨论】:

  • 也许你的意思是before_save { self.email.downcase! }
  • 当然!非常感谢!我真是个白痴:(

标签: mysql ruby-on-rails ruby database


【解决方案1】:

!self.email.downcase 将返回 truefalse

使用self.email.downcase! 将电子邮件更改为小写。

【讨论】:

  • 上帝保佑你敏锐的眼睛!我看了这个代码一百遍,但没有看到这个明显的问题!!!早餐必须停止喝伏特加:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多