如果我想让登录用户在他们的编辑页面上更改个人资料信息,而不是像他们目前那样输入他们的密码,我怎么能在UsersController中有效地改变它?
UsersController:
before_filter :authenticate, :except => [:show, :new, :create]
before_filter :authenticate, :only => [:index, :edit, :update, :destroy]
before_filter :correct_user, :only => [:edit, :update]
before_filter :admin_user, :only => :destroy
def edit
@title = "Edit user"
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated."
redirect_to @user
else
@title = "Edit user"
render 'edit'
end
end
编辑页面
</div>
<h1> Confirm Password</h1><br /><br />
<div class="field">
<%= f.label :password, "Enter Password" %>
<%= f.password_field :password %>
</div>
<div class="field">
<%= f.label :password_confirmation, "Confirm Password" %>
<%= f.password_field :password_confirmation %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
</div>
答案 0 :(得分:0)
我不明白你的问题。如果您在登录时验证其用户名和密码,则无需重新输入密码即可编辑其个人资料页面。登录后,它应该保持不变。您使用的是任何身份验证宝石吗?
答案 1 :(得分:0)
如果你使用的是设计宝石,请将它放在你的用户模型中:
def update_with_password(params={})
if current_user && self.password.blank?
false
if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end
else
super
end
end
答案 2 :(得分:0)
以下是我现在正在进行的项目中的工作方式:
用户模型:
validates :password, :length => { :minimum => 8, :maximum => 20}, :unless => Proc.new { |u| u.password_optional? or u.password.blank? }
validates :password, :confirmation => true, :unless => Proc.new { |u| u.password_optional? }
此方法取决于您拥有的密码逻辑......但我的看起来像这样:
def password_optional?
optional = (encrypted_password.present? && password.blank? && password_changing.blank?)
optional
end
用户控制器 在您希望密码为可选的任何操作中,请执行以下操作: (假设你有一个@user对象......)
@user.password_optional = true
我认为这将在您的更新操作中。