Ruby on Rails Tutorial: Как редактировать информацию пользователя без подтверждения пароля - PullRequest
4 голосов
/ 16 августа 2011

Я работал над учебным пособием по 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 не выполняется.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 13 февраля 2013

Чтобы немного уточнить ответ Дилана, вам нужно определить тот метод 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 голос
/ 15 октября 2014

Если вы используете 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
1 голос
/ 16 августа 2011

На вашей User модели у вас, вероятно, есть что-то вроде:

validates_presence_of :password_confirmation

Добавьте предложение if следующим образом, таким образом оно проверяет только подтверждение, когда пароль действительно изменяется:

validates_presence_of :password_confirmation, :if => :password_changed?
...