Rails 4: как проверить, был ли удален экземпляр
В нашем приложении Rails у нас есть CalendarsController
:
class CalendarsController < ApplicationController
def create
@calendar = current_user.calendars.create(calendar_params)
current_user.add_calendar_and_role(@calendar.id, 'Owner')
if @calendar.save
current_user.total_calendar_count += 1
current_user.owned_calendar_count += 1
current_user.save
flash[:success] = "Calendar created!"
redirect_to dashboard_path
else
render 'static_pages/home'
end
end
def show
@calendar = Calendar.find(params[:id])
@posts = @calendar.posts
@post = Post.new
end
def index
end
def edit
end
def destroy
Calendar.find(params[:id]).destroy
flash[:success] = "Calendar deleted"
redirect_to dashboard_path
end
private
def calendar_params
params.require(:calendar).permit(:name)
end
end
в create
действие, когда создается новый @calendar, мы запускаем @calendar.save
проверить, был ли фактически создан новый экземпляр, а затем выполнить некоторые действия.
Мы хотели бы реализовать аналогичный процесс в нашем destroy
действие.
Мы думаем об обновлении destroy
метод следующим образом:
def destroy
@calendar = Calendar.find(params[:id])
@calendar.destroy
if @calendar.delete
flash[:success] = "Calendar deleted"
current_user.total_calendar_count -= 1
if @calendar.administrations.role == "Owner"
current_user.owned_calendar_count -= 1
end
end
redirect_to dashboard_path
end
Является ли синтаксис этого кода правильным, в частности if @calendar.delete
а также if @calendar.administrations.role == "Owner"
?
И, самое главное, был бы код этого destroy
действие имеет смысл?
2 ответа
Решение
Я считаю, что это было бы больше похоже на:
def destroy
@calendar = Calendar.find(params[:id])
calendar_admin_role = @calendar.administrations.role
if @calendar.destroy
flash[:success] = "Calendar deleted"
current_user.total_calendar_count -= 1
if calendar_admin_role == "Owner"
current_user.owned_calendar_count -= 1
end
end
redirect_to dashboard_path
end
Но это после моей работы после долгого рабочего дня, поэтому могу ошибаться.
Вы думали об использовании persisted?
метод
@calendar.destroy
unless @calendar.persisted?
... some code here ....
end