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
Другие вопросы по тегам