對於一些註冊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的「創建」方法。答案引用了'鐵軌方式'。 –