1

如果我想让登录的用户在他们的编辑页面上更改个人资料信息,但不必输入他们的密码,就像他们目前所做的那样,我如何在 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" %>&nbsp;&nbsp;&nbsp;&nbsp;
        <%= f.password_field :password %>
    </div>
    <div class="field">
       <%= f.label :password_confirmation, "Confirm Password" %>&nbsp;&nbsp;&nbsp;
       <%= f.password_field :password_confirmation %>
   </div>
   <div class="actions">
      <%= f.submit "Submit" %>
   </div>
   <% end %>
   </div>
4

3 回答 3

0

如果您使用的是设计 gem,请将其放入您的用户模型中:

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
于 2012-04-17T16:00:54.677 回答
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

我认为这将在您的更新操作中。

于 2012-04-17T16:25:44.980 回答
0

我不明白你的问题。如果您在登录时验证他们的用户名和密码,他们不应该重新输入密码来编辑他们的个人资料页面。登录后,它应该持续存在。您是否使用任何身份验证宝石?

于 2012-04-17T15:54:13.353 回答