0

私のコードでは、管理者はユーザーを追加してジョブを割り当てることができます。管理者がユーザーを削除することを決定した場合、ユーザーが割り当てられている可能性のあるジョブを確認し、管理者への割り当てを更新したいと考えています。ユーザーの削除は私のuser_controllerで行われ、ジョブを呼び出すので、これが最善の方法ですか? そうでない場合、特にユーザーが 1 ~ N のジョブに割り当てられている場合に、これを行う最も効率的な方法についてアドバイスしていただけますか? 前もって感謝します。

users_controller.rb

 def destroy
     if admin?
       jobs = Job.where("user_id = ?", params[:id]) #find jobs where user is that being deleted
       jobs.each do |job|         
        job.update_attribute(:user_id, current_user.id)  #for each job set the user_id to the admin_id
       end     
    end
    redirect_to users_url
  end
4

3 に答える 3

1

update_allで呼び出しを使用することを提案しますActiveRecord::Relation

あなたの場合、それを実現する簡単な方法は次のとおりです。

Job.where(user_id: params[:id]).update_all(user_id: current_user.id)

Rails の新しいバージョン (少なくともまだリリースされていない 4) では、大量割り当ては危険であるため、これは防止されることに注意してください。そのため、属性を「ホワイトリスト」に登録する必要がありuser_idます。

于 2012-06-27T20:10:58.987 に答える
1

#update_allメソッドを使用して、SQL クエリを 1 つだけ実行できます。

ここでは、@user.id の user_id を持つすべてのジョブを更新し、user_id を current_user.id に設定します。

  def destroy
    @user = User.find(params[:id])
    if admin?
      Job.update_all {user_id: current_user.id}, {user_id: @user.id} 
    end
    @user.destroy
    redirect_to users_url
  end
于 2012-06-27T20:07:42.973 に答える
0

最初にインスタンス変数でそのユーザーのジョブを選択し、次にそれらをループして、関連する外部キーを管理者の user_id に更新します。その後、元のレコードを破棄します。

于 2012-06-27T19:48:17.037 に答える