我有一個客戶端的編輯窗體。也可以更改密碼,但每次更改其他設置時,您都不想更改(和/或重新輸入)密碼。爲了避免更新密碼,我試過這個:Ruby on rails更新客戶端,使用和不使用新密碼
def client_update_params
if admin? == true
params.require(:client).permit(:name, :email,:company_name,
:address_street,:address_number,:address_city,
:address_zip,:address_country,:billing_informations)
else
if params[:client][:password].blank?
params[:client].delete("password")
params[:client].delete("password_confirmation")
params.require(:client).permit(:name, :email,:company_name,
:address_street,:address_number,:address_city,
:address_zip,:address_country)
else
params.require(:client).permit(:name, :email,:company_name,
:address_street,:address_number,:address_city,
:address_zip,:address_country,
:password,:password_confirmation)
end
end
end
所以我們的想法是檢查密碼字段是否設置。如果已設置,請用新密碼更新,否則請勿更新密碼。但每次我點擊提交(並將密碼字段留空),表單驗證表明密碼是短的。
是否有可能爲此問題提供工作/更優雅的解決方案?
編輯:驗證ON MODEL:
attr_accessor :is_admin_applying_update
attr_accessor :plain_password
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
before_save { self.email = email.downcase }
before_create :create_remember_token
validates :name, presence: true, length: { maximum: 50 }
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :company_name,presence:true
validates :address_street,presence:true
validates :address_number,presence:true
validates :address_city,presence:true
validates :address_zip,presence:true
validates :address_country,presence:true
validates :billing_informations,presence:true
has_secure_password
validates :password, length: { minimum: 6 }, :unless => :is_admin_applying_update
def Client.new_remember_token
SecureRandom.urlsafe_base64
end
def Client.encrypt(token)
Digest::SHA1.hexdigest(token.to_s)
end
private
def create_remember_token
self.remember_token = Client.encrypt(Client.new_remember_token)
end
是在模型驗證什麼? – evkline
我編輯了問題 – user1990524
請注意,您的VALID_EMAIL_REGEX不是很有效。例如,它允許'email @ .. c'。它甚至允許'。@ .. c' – Jon