我有一个客户端的编辑窗体。也可以更改密码,但每次更改其他设置时,您都不想更改(和/或重新输入)密码。为了避免更新密码,我试过这个: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