在rails中的before_destroy,需要一点帮助!

时间:2011-05-11 12:04:02

标签: ruby-on-rails

我有一个名为users的表格,如果我要删除一些user(用户可以添加questions并添加respondentsanswer将{ questions)),我需要删除他,并将他的身份识别给删除此人的人。例如:

1 个答案:

答案 0 :(得分:2)

不确定

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

现在使用此方法代替“destroy”方法。 要么 你可以坚持这样的回调

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

只是几个想法!祝你好运!

更新:我在上面提供的所有代码都属于您的模型。 在你的控制器中你需要一个破坏方法

控制器中的

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

根据您的需要进行更改!