2011-08-16 5 views
3

私はMichael HartlのRuby on Railsチュートリアルの作業をしています。現在、ユーザーの属性のいずれかを編集するには、ユーザーがパスワードを確認する必要があります。これをしなくてもユーザー属性を更新する方法はありますか?Ruby on Railsチュートリアル:パスワードを確認せずにユーザー情報を編集する方法

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

<%= 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アクションが失敗しました。

ありがとう!パスワードが実際に変更されている確認のためにその方法は、それだけをチェックし、次のように

validates_presence_of :password_confirmation 

if句を追加します:あなたのUserモデルに

答えて

0

、あなたはおそらくの線に沿って何かを持っている

validates_presence_of :password_confirmation, :if => :password_changed? 
+0

に私のために働いたコードであり、存在=> true、:確認=> true、長さ=> {:within => 6.40} ' 私は試しました: ' validates:password、:presence => true、:確認=> true: length => {:within => 6.40}、if =>:password_changed? ' そして構文エラーが発生しました。何か案は? – steffi2392

+0

あなたのコードと一致するように私の 'User'モデルを変更しました。エラーが出ました:" Undefined method password_changed? "どのように/どこで定義すればよいですか? – steffi2392

+0

他にどのようなバリデーションがありますか?あなたの検証コードは実際に私にとって完璧に機能します。それはどのような特定の検証エラーですか? (例えば、「パスワードが確認と一致しません」のようなものですか?) –

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 
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 
関連する問題