4

我一直在阅读 Michael Hartl 的 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 操作失败。

谢谢!

4

3 回答 3

2

为了稍微完善 Dylan 的答案,您需要定义给您错误的 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

在您的User模型上,您可能有以下内容:

validates_presence_of :password_confirmation

添加if如下子句,这样它只在实际更改密码时检查确认:

validates_presence_of :password_confirmation, :if => :password_changed?
于 2011-08-16T05:04:30.730 回答
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 回答