2017-12-12 1 views
0

リレーションがコントローラに直接保存されているかどうか確認したいと思います。リレーションが保存または削除されたかどうかを確認する

@ut = UsersTask.where(task_id: @task.id).where(user_id: @user.id).delete_all 
if @ut.destroyed? 
    @task.update(effectif: (@task.effectif -= 1)) 
end 
+0

「効果」はタスクの数であるはずですか? '@ task.users_tasks.count'や(ユーザーに固有のものなら)' @ task.users_tasks.where(user:@user).count' – SteveTurczyn

+0

ありがとう@SteveTurczyn buそれは本当に重いリクエストです。それを避けたい –

答えて

1

あなたはそのような何かを行うことができます。

respond_to do |format| 
    if @task.users.include?(@user) 
    format.js {render inline: "location.reload();" } 
    else 
    UsersTask.where(task_id: @task.id, user_id: @user.id).first_or_create 
    @task.update(effectif: (@task.effectif += 1)) 
    format.js 
    end 
end 
+0

偉大な解決策@ジャックメネ、それは私の場合のための本当にクールでエレガントなソリューションです!おかげで –

+0

あなたは歓迎、良い継続 –

0

delete_allが影響を受けた行数を返します。しかし、現在、私は解決策に

私のコードを見つけることができません。 @ut.countと返信をdelete_allと比較するだけで十分だと思います。単に変数にそれらの2つの値を割り当て、それらを比較:

@ut = UsersTask.where(task_id: @task.id).where(user_id: @user.id) 
@tasks_to_delete = @ut.size 
@deleted_tasks = @ut.delete_all 

if @tasks_to_delete.eql?(@deleted_tasks) 
    @task.update(effectif: (@task.effectif -= 1)) 
end 

それとも、あなたは@utUsersTasksをロードしたくない場合は、あなたが行うことができます:

users_task_number = UsersTask.count 
@ut = UsersTask.where(task_id: @task.id).where(user_id: @user.id).delete_all 
if UsersTask.count.eql?(users_task_number - @ut) 
    @task.update(effectif: (@task.effectif -= 1)) 
end 
+0

あなたの答えのためにありがとう@MrShemek、それはそれを解決するための良い解決策に見える –

関連する問題