Я работаю в устаревшем приложении Rails, которое было тщательно обновлено с каждой основной версией Rails, и в настоящее время мы находимся на rails 5.1, и я не могу получить before_destroy
, чтобы предотвратить удаление, если оно не проходит проверку
Я читал, что return false
устарело, и мы все должны использовать throw :abort
, но ни один из них не работает. Я не получаю никаких ошибок, запись о присоединении просто удаляется, несмотря на throw
user.rb:
class User < ApplicationRecord
has_many :permission_users
has_many :permissions, through: :permission_users, dependent: :destroy
end
присоединиться к моделиmission_user.rb:
class PermissionUser < ApplicationRecord
belongs_to :user
belongs_to :permission
before_destroy :check_before_removing!
private
def check_before_removing!
if not_valid? # condition isn't important
errors.add :base, exception.message
throw(:abort)
end
end
end
моя спецификация:
specify "cannot have their admin permissions revoked" do
expect {
admin.permissions.delete admin_permission
}.to change { admin.permissions.count }.by(0)
end
# => expected `admin.permissions.count` to have changed by 0, but was changed by -1