@keri4

Как изменить атрибуты без пароля, используя has_secure_password, Rails 4?

Модель юзера:
class User < ActiveRecord::Base  
  validates :email, presence: true, format: { with: /\A[a-z\d\-_.]+@[a-z\d\-.]+\.[a-z]+\z/i }, uniqueness: { case_sensitive: false }
  validates :name, length: { maximum: 100 }
  validates :password, length: { minimum: 6 }
  
  before_save { email.downcase! }
  
  has_secure_password
  
  has_many :events, dependent: :destroy  
end


На одной страничке две формы:
<%= form_for @user, html: { class: 'form-horizontal' } do |f| %>
    <div class = 'form-group'>
      <%= f.label 'Name', class: 'col-sm-6 control-label' %>
      <div class = 'col-sm-6'>
        <%= f.text_field :name, class: 'form-control' %>
      </div>
    </div>
    <div class = 'form-group'>
      <%= f.label 'Email', class: 'col-sm-6 control-label' %>
      <div class = 'col-sm-6'>
        <%= f.email_field :email, class: 'form-control' %>
      </div>
    </div>
    <div class = 'form-group'>
      <div class = 'col-sm-8 col-sm-offset-6'>
        <%= f.submit 'Update profile', class: 'btn btn-primary' %>
      </div>
    </div>
  <% end %>
  
  <%= form_for @user, html: { class: 'form-horizontal' } do |f| %>
    <div class = 'form-group'>
      <%= f.label 'Current password', class: 'col-sm-6 control-label' %>
      <div class = 'col-sm-6'>
        <%= f.password_field :current_password, class: 'form-control' %>
      </div>
    </div>
    <div class = 'form-group'>
      <%= f.label 'New password', class: 'col-sm-6 control-label' %>
      <div class = 'col-sm-6'>
        <%= f.password_field :password, class: 'form-control' %>
      </div>
    </div>
    <div class = 'form-group'>
      <%= f.label 'Confirm new password', class: 'col-sm-6 control-label' %>
      <div class = 'col-sm-6'>
        <%= f.password_field :password_confirmation, class: 'form-control' %>      
      </div>
    </div>
    <div class = 'form-group'>
      <div class = 'col-sm-8 col-sm-offset-6'>
        <%= f.submit 'Change password', class: 'btn btn-primary' %>
      </div>
    </div>
  <% end %>


С помощью второй формы получается изменить пароль, однако первая форма не работает, ей нужен в params ключ :password, #update_attributes не работает, из-за этого изменения не фиксируются в базе данных.
Очень нужна помощь, потому что не хочется запрашивать пароль при изменении имени или email юзера.
  • Вопрос задан
  • 2609 просмотров
Пригласить эксперта
Ответы на вопрос 1
viktorvsk
@viktorvsk
А почему не девайс? Если есть хоть какие-то планы развития, то без него врядли будет легко.

А вместо update_attributes в крайнем случае можно использовать update_column
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы