对于一些注册validate_uniqueness_of无法正常工作,即使它运行控制台Ruby on Rails的验证错误
2.1.5 :001 > User.create_with_password('rajiv', 'abc')
(0.1ms) begin transaction
User Exists (0.4ms) SELECT 1 AS one FROM "users" WHERE "users"."username" = 'rajiv' LIMIT 1
(0.2ms) rollback transaction
=> #<User id: nil, username: "rajiv", salt: "ddda20c52e698f6e5623d7e782e2cd19", password_hash: "565b91a38e2acc41887e3936fe660b68245b3f1d8118f38bbc...">
2.1.5 :002 >
def register
@username = params[:Username]
@password = params[:password]
@rePassword = params[:rePassword]
user = User.create_with_password(@username, @password)
if user
session[:signed_in] = true
session[:username] = user.username
flash[:notice] = "User successfully created you can sign in now"
redirect_to '/Sign_up'
else
flash[:notice] = "User already exists"
end
请告诉我什么时候工作什么我做错了网站IM上运行它时是:
https://ipt-dynaman.c9.io/Sign_up
这里是我的模型代码:
class User < ActiveRecord::Base
validates_presence_of :username, :salt, :password_hash
validates_uniqueness_of :username
def self.create_with_password(username, password)
salt = SecureRandom.hex
password_hash = self.generate_hash(password, salt)
self.create(
username: username,
salt: salt,
password_hash: password_hash
)
end
def verify_password(password)
self.password_hash == User.generate_hash(password, self.salt)
end
def self.generate_hash(password, salt)
digest = OpenSSL::Digest::SHA256.new
digest.update(password)
digest.update(salt)
digest.to_s
end
end
感谢:D病检查设计 – dynaman
创建不仅仅是关系。还保存并保存!两者都运行验证 - 如果验证说该记录是无效的,它们只会有所不同。 –
真的关于'save'和'save!'第二个在验证失败时抛出异常。除了关联以外,我没有找到任何ActiveRecord的“创建”方法。答案引用了'铁轨方式'。 –