2011-05-11 106 views

回答

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 

現在使用此方法代替「銷燬」方法。 OR 你能堅持回調這樣

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 

更改爲適合您的旅行,當然需要!

+0

thaaanks快速響應,但有些錯誤,併爲我工作:(我使用第一個例子和notginh,並使用第二,仍然沒有,等待,第二個檢查我shoudl寫在模型或控制器? – 2011-05-11 12:40:07

+0

看看我有什麼= > ActionController :: UnknownAction(沒有行動響應銷燬。操作:check_if_authenticated,創建,destroy_and_transfer_to,索引和更新): – 2011-05-11 12:49:46

+0

這一切都在模型中 – 2011-05-11 12:51:41