Я пользуюсь рельсами и разрабатываю.Единственный способ обновить объект пользователя - пройти через форму.Даже когда я использую console или save (false), объекты devise, похоже, не работают.
Я не хочу отображать новый и подтверждать пароль, если пользователь не щелкнет ссылку с надписью изменить пароль.Затем это изменяет логическое значение для пользователя на true и перенаправляет на страницу пользователя, а затем if / else / end показывает соответствующий код.
Проблема в том, что первый change_password действительно установлен, но второйне изменит его обратно.Сумасшедший.
модель
devise :registerable, :database_authenticatable, :recoverable,
:rememberable, :trackable, :validatable, :confirmable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :name, :change_password
has_many :analytics
has_many :answers
before_save :change_password_to_false
def change_password_to_false
self.change_password = false
end
контроллер
def change_password
player = Player.find(current_player.id)
player.change_password = true
player.save(false)
redirect_to edit_player_registration_path
end
def keep_password_the_same
player = Player.find(current_player.id)
player.change_password = false
player.save(false)
redirect_to edit_player_registration_path
end
просмотр
<% if current_player.change_password? %>
<h4><%= link_to "Keep Password The Same", keep_password_the_same_path %></h4>
<%= render 'change_password', :f => f %>
<% else %>
<h4><%= link_to "Change Password", change_password_path %></h4>
<% end %>
Обновление
Было несколько проблемс кодом, но Codevoice смог получить меня в правильном направлении.Я думал, что save (false) также обходил обратные вызовы, но это было не так.Таким образом, каждый раз, когда пользователь обновлялся, даже когда пользователь обновлялся с помощью сохранения (false), ему change_password
присваивалось значение false.
Вторым моментом было предоставление пользователю возможности удалить поля смены пароля, еслиони решили, что не хотят это менять.Так что в обратном вызове я просто проверяю, было ли просто изменено поле change_password
на true, а затем я ничего не делаю.Если пароль уже был истинным, а пользователь только что обновился, вы можете сбросить его на false.