2012-01-07 3 views
2

私のユーザモデルはレールupdate_attributes

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

を持っており、ユーザーのコントローラ上の私の更新アクションが

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 

私の編集ビューは、問題はそのIである

<%= form_for(@user) do |f| %> 
<%= render 'shared/error_messages', :object => @user.errors%> 
<div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
</div> 
<div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %> 
</div> 
<div class="field"> 
    <%= f.label :password %> <br /> 
    <%= f.password_field :password %> 
</div> 
<div class="field"> 
    <%= f.label :password_confirmation, "Confirmation" %> <br /> 
    <%= f.password_field :password_confirmation %> 
</div> 
<div class="actions"> 
    <%= f.submit "Update" %> 
</div> 

ですモデルの特定の属性のみを更新し、パスワードを入力しない毎回d。パスワード(および確認)を入力しなかった場合、検証エラーが発生します)

状況を修正するにはどうすればよいですか?

+0

私はちょうど見たhttp://stackoverflow.com/questions/7073720/ruby-on-rails-tutorial-how-to-edit-user-information-without-confirming-the-pass私はテストしますそれと報告バック –

+0

リンク上のソリューションが動作していません... –

答えて

1

を検証し、次の検証ルールを試してみてください? || !password.nil? }

0

attr_protectedを使用すると、一部のフィールドをupdate_attributesから除外できます。 docを参照してください。より良い方法は、attr_accessibleを使用して、一括割り当てによって更新できる属性をホワイトリストにすることです。パスワードを、::存在=> trueの場合、します。if =>ラムダ{new_record

+0

私はattr_protectedを使用する場合、ユーザーは最初の場所でパスワードを入力することができなくなります –