@railshello

Как использовать has_many :posts, dependent:?

У меня есть модель User
class User < ActiveRecord::Base
  has_many :posts, dependent: :destroy
end

Как использовать dependent, так чтобы выдавало ошибку, если существуют записи?
Если нет постов, то можно удалить юзера!
Нашёл параметр :restrict_with_exception, но он почему-то не срабатывает:
class User < ActiveRecord::Base
  has_many :posts, dependent: :restrict_with_exception
end

class UsersController < ApplicationController
...
  def destroy
    @user.destroy
    flash[:danger] = "Success"
    redirect_to users_path
  rescue => e
    flash[:danger] = "Error"
    redirect_to @user
  end
...
end
  • Вопрос задан
  • 2479 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vladson4ik
В данном случае я бы рекомендовал не использовать исключения для управления. Более того, для Вашей задачи больше подойдет параметр :restrict_with_error
В исходниках рельсы:
when :restrict_with_error
          unless empty?
            record = klass.human_attribute_name(reflection.name).downcase
            owner.errors.add(:base, :"restrict_dependent_destroy.many", record: record)
            false
          end

        else

В этом случае вы как обычно делаете
if @user.destroy
  ...
else 
....
end

Есть еще вариант использовать before_destroy директиву, и либо делать там явную проверку, либо бросать исключение в явном виде. Главное в негативном сценарии не забыть вернуть false.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы