Обновление объекта разработки без формы, Rails - PullRequest
0 голосов
/ 24 декабря 2010

Я пользуюсь рельсами и разрабатываю.Единственный способ обновить объект пользователя - пройти через форму.Даже когда я использую 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.

1 Ответ

1 голос
/ 24 декабря 2010

по моему мнению, ваш атрибут change_pasword будет всегда false, поскольку вы используете before_save :change_password_to_false. Это означает, что вы меняете change_password на false каждый раз, когда сохраняете Player модель

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...