4

私はMichaelHartlによるRubyonRailsチュートリアルに取り組んできました。現在、ユーザー属性のいずれかを編集するには、ユーザーは自分のパスワードを確認する必要があります。これを行わずにユーザー属性を更新する方法はありますか?

私のフォームは次のようになります。

    <%= form_for @user do |f| %>
      <div class="field">
        <%= f.label :course1 %><br />
        <%= f.text_field :course1 %>
      </div>
      <div class="actions">
        <%= f.submit "Update" %>
      </div>
    <% end %>"

そしてusers_controller.rbの私の更新定義は次のようになります:

def update

    if @user.update_attributes(params[:user])
        flash[:success] = "Edit Successful."
        redirect_to @user
    else
        @title = "Edit user"
        render 'edit'
    end
end

現在、update_attributesアクションは失敗します。

ありがとう!

4

3 に答える 3

2

ディランの答えを少し洗練するには、エラーを発生させていた password_changed メソッドを定義する必要があります。パスワードが変更されてもかまわないので、別の名前を使用しました。

 validates :password, :presence => true,
                       :confirmation => true,
                       :length => { :within => 6..40 },
                       :unless => :already_has_password?

  private

    def already_has_password?
      !self.encrypted_password.blank?
    end
于 2013-02-13T19:01:49.060 に答える
1

パスワードの暗号化に bcrypt を使用している場合、Rails 4 で動作したコードを次に示します。

#--Code for User method
validates :password, presence: true, confirmation: true, :unless => :already_has_password?   
#
private
    def already_has_password?
      !self.password_digest.blank?
    end
于 2014-10-15T15:05:35.433 に答える
1

Userモデルには、おそらく次のようなものがあります。

validates_presence_of :password_confirmation

次のように句を追加ifします。これにより、パスワードが実際に変更されたときにのみ確認がチェックされます。

validates_presence_of :password_confirmation, :if => :password_changed?
于 2011-08-16T05:04:30.730 に答える