Authentication rails更新属性

Authentication rails更新属性,authentication,ruby-on-rails-3.1,update-attributes,Authentication,Ruby On Rails 3.1,Update Attributes,我的用户模型 validates :password, :presence => true, :confirmation => true, :length => {:within => 6..40} 我在用户控制器上的更新操作是 def update @user = User.find(params[:id])

我的用户模型

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>

@用户错误%>




问题是我只想更新模型的特定属性,而不是每次都输入密码。如果我没有输入密码(和确认),我会得到验证错误)


如何解决此问题?

您可以使用
attr\u protected
更新属性中排除某些字段。看。更好的方法是使用
attr\u accessible
将可通过批量分配更新的属性列为白名单。

尝试下一个验证规则

验证:password,:presence=>true,:if=>lambda{new_记录|| !password.nil?}


我刚刚看到我将测试它并报告链接上的解决方案不起作用…如果我使用attr_protected,用户将无法首先输入密码