Ruby on rails 用户的电子邮件参数未保留到数据库中
我在rails 4.1.8应用程序中创建了一个用户模型,属性为email和password。我启动了rails控制台,user=user.newemail:user@example.com,password:示例work but user.save保存密码并省略电子邮件。下面是模型、迁移的数据库文件和rails控制台日志 用户模型Ruby on rails 用户的电子邮件参数未保留到数据库中,ruby-on-rails,email,ruby-on-rails-4,Ruby On Rails,Email,Ruby On Rails 4,我在rails 4.1.8应用程序中创建了一个用户模型,属性为email和password。我启动了rails控制台,user=user.newemail:user@example.com,password:示例work but user.save保存密码并省略电子邮件。下面是模型、迁移的数据库文件和rails控制台日志 用户模型 class User < ActiveRecord::Base before_save {self.email = email.downcase! }
class User < ActiveRecord::Base
before_save {self.email = email.downcase! }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
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
用户的数据库文件
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :email, unique: true
t.string :password_digest
t.timestamps null: false
end
end
end
RAILS控制台日志
<r.new(email: "user@example.com" , password: "example")
=> #<User id: nil, email: "user@example.com", password_digest: "$2a$10$jxwd/oriT
z2HklHK4b4nf.P.DWb6s35YTO.EbYwup0I...", created_at: nil, updated_at: nil>
irb(main):008:0> user.save
(1.0ms) BEGIN
User Exists (1.0ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = 'user@example.com' LIMIT 1
SQL (46.0ms) INSERT INTO `users` (`created_at`, `password_digest`, `updated_at`) VALUES ('2015-07-20 20:54:35', '$2a$10$jxwd/oriTz2HklHK4b4nf.P.DWb6s35YTO.Eb
Ywup0I.gMTOLSNKa', '2015-07-20 20:54:35')
(89.1ms) COMMIT
=> true
用户控制器
class UsersController < ApplicationController
def new
end
private
def user_params
params.require(:user).permit(:email)
end
end
查看未插入电子邮件参数的日志;非常感谢您的帮助。在您的用户模型中尝试以下操作:
唐卡斯!编辑调用它的变量,并且不返回downcase字符串,除非有需要downcase的内容,即,如果您在全小写电子邮件中使用它,它将返回nil,并且根据您的控制台输出,这就是发生的情况。光是唐卡斯就可以了
您的users\u controller.rb中的user\u params strong params方法是什么样子的?@MarsAtomic,我添加了我的UsersController@OpyOsegs对于compelle答案来说,这还不够,但您需要将对象保存在控制器中。例如,定义create方法,并添加逻辑,如if@user.save。。。您也没有在中定义@user对象controller@HunterStevens是的,create方法和其他方法需要编写,但我正在尝试使其成为一个测试驱动的应用程序。这是在编写代码之前编写测试的好工作。只是期望任何测试都会失败,因为你没有写这些方法,它就像一个魅力;谢谢你的API页面。没问题!很高兴事情解决了!
before_save {self.email = email.downcase } # no "!"