before_destroy в rails, нужна небольшая помощь!

#ruby-on-rails

#ruby-on-rails

Вопрос:

у меня есть таблица, вызываемая users , если я хочу удалить некоторого user (пользователь может добавлять questions и add respondents (кто будет answer на своем questions )), мне нужно удалить его и передать его идентификатор людям, которые удалили этого человека. Так, например:

Ответ №1:

Конечно.

 def destroy_and_transfer_to(user)
  transaction do
    questions.each do |q|
      q.update_attribute(:user_id => user)
    end
    respondents.each do |r|
      r.update_attribute(:user_id => user)
    end
    destroy
  end
end
  

Теперь используйте этот метод вместо метода «уничтожить».
ИЛИ
вы можете придерживаться обратных вызовов, подобных этому

 before_destroy :transfer_to
attr_accessor :user_who_takes_over

private

def transfer_to
  if user_who_takes_over
    questions.each do |q|
      q.update_attribute(:user_id => user_who_takes_over)
    end
    respondents.each do |r|
      r.update_attribute(:user_id => user_who_takes_over)
    end
  end
end
  

Тогда вы можете :

 @user.user_who_takes_over = current_user
@user.destroy
  

Всего пара идей! Удачи!

Обновление: Весь код, который я предоставил выше, принадлежит вашей модели. В вашем контроллере у вас должен быть метод destroy

в вашем контроллере

 def destroy
  user = User.find(params[:id])
  user.user_who_takes_over = current_user
  if user.destroy
    flash[:notice] = "User destroyed, all stuff transferred"
  else
    Rails.logger.debug(user.errors.inspect)
    flash[:error] = "Error destroying user"
  end
  redirect_to :back
end
  

Измените, чтобы удовлетворить ваши потребности, конечно!

Комментарии:

1. спасибо за быстрый ответ, но что-то не так и у меня не работает: (я использую первый пример и не запускаю, использую второй и по-прежнему ничего, подождите, второй пример я должен написать в модели или контроллере?

2. посмотрите, что у меня есть => ActionController::UnknownAction (На уничтожение не отреагировало ни одно действие. Действия: проверка подлинности, создание, разрушение_и_трансфер_то, индексирование и обновление):

3. Большое спасибо, что вы помогаете, тратите свое время, но у меня все еще есть ошибки, когда я пишу это все, я получаю => Загрузка пользователя (0,2 мс) ВЫБЕРИТЕ * ИЗ users WHERE ( users . id = 57) Загрузка пользователя (0,2 мс) ВЫБЕРИТЕ * ИЗ users WHERE ( users . id = ‘—: id n’) при использовании второго метода, где before_destroy

4. Я предполагаю, что вы немного разбираетесь в rails! не беспокойтесь. вот, чтобы помочь.

5. попробуйте user = User.find(параметры[:id])