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

devise 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

あなたの質問がわかりません。ログイン時にユーザー名とパスワードを認証している場合は、プロファイルページを編集するためにパスワードを再入力する必要はありません。ログイン後、それは持続するはずです。認証gemを使用していますか?

于 2012-04-17T15:54:13.353 に答える
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 に答える