リレーションがコントローラに直接保存されているかどうか確認したいと思います。リレーションが保存または削除されたかどうかを確認する
@ut = UsersTask.where(task_id: @task.id).where(user_id: @user.id).delete_all
if @ut.destroyed?
@task.update(effectif: (@task.effectif -= 1))
end
リレーションがコントローラに直接保存されているかどうか確認したいと思います。リレーションが保存または削除されたかどうかを確認する
@ut = UsersTask.where(task_id: @task.id).where(user_id: @user.id).delete_all
if @ut.destroyed?
@task.update(effectif: (@task.effectif -= 1))
end
あなたはそのような何かを行うことができます。
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
偉大な解決策@ジャックメネ、それは私の場合のための本当にクールでエレガントなソリューションです!おかげで –
あなたは歓迎、良い継続 –
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
それとも、あなたは@ut
にUsersTasks
をロードしたくない場合は、あなたが行うことができます:
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
あなたの答えのためにありがとう@MrShemek、それはそれを解決するための良い解決策に見える –
「効果」はタスクの数であるはずですか? '@ task.users_tasks.count'や(ユーザーに固有のものなら)' @ task.users_tasks.where(user:@user).count' – SteveTurczyn
ありがとう@SteveTurczyn buそれは本当に重いリクエストです。それを避けたい –