2

私のユーザーモデルには

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

私の編集ビューは

<%= 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>

問題は、モデルの特定の属性のみを更新し、毎回パスワードを入力したくないということです。パスワード(および確認)を入力しないと、検証エラーが発生します)

どうすれば状況を修正できますか?

4

2 に答える 2

1

次の検証ルールを試す

:password、:presence => true、:if => lambda {new_record?|| !password.nil?}

于 2012-02-14T22:12:41.707 に答える
0

attr_protectedから一部のフィールドを除外するために使用できますupdate_attributesドキュメントを参照してください。さらに良い方法はattr_accessible、一括割当によって更新できる属性をホワイトリストに登録するために使用することです。

于 2012-01-07T10:30:32.077 に答える