Rails зависимый уничтожить не работает - PullRequest
0 голосов
/ 13 июня 2018

У меня есть User и Organization модель.User has_many :organizations и Organization has_many :users.

Когда я хочу уничтожить пользователя из БД, используя @user.destroy, я получаю ошибку Key (id)=(3) is still referenced from table "organizations".

Вот мои модели пользователей и организаций:

Organization.rb

class Organization < ApplicationRecord
  extend FriendlyId
  friendly_id :name, :use => :slugged

  has_many :members, :dependent => :destroy
  has_many :users, :through => :members, :dependent => :destroy
  has_many :moderators, -> { where :members => { :role => 1 } }, :through => :members, :source => :user
  has_many :admins, -> { where :members => { :role => 2 } }, :through => :members, :source => :user
  has_many :campains, :dependent => :destroy
  has_many :statuses, :as => :statusable
  has_many :activities
  has_many :world_members
  has_many :teams

  accepts_nested_attributes_for :members, :users

User.rb

class User < ApplicationRecord
  extend FriendlyId
  friendly_id :full_name, :use => :slugged
  acts_as_voter

  enum role: [:user, :moderator, :organization, :admin]

  has_many :members, :class_name => "Member", :foreign_key => "user_id", :dependent => :destroy
  has_many :organizations, :through => :members, :dependent => :destroy
  has_many :conversations, :foreign_key => :sender_id

  has_many :admin_organizations, ->{ where(members: {role: 2}) }, :through => :members, source: :organization
  has_many :moderate_organizations, ->{ where(members: {role: 1}) }, :through => :members, source: :organization
  has_many :member_organizations, ->{ where(members: {role: 0}) }, :through => :members, source: :organization

  accepts_nested_attributes_for :members, :organizations

Member.rb

class Member < ApplicationRecord
  enum role: [:member, :moderator, :admin]
  belongs_to :user
  belongs_to :organization

1 Ответ

0 голосов
/ 13 июня 2018

Вы не должны иметь dependent_destroy для :organizations или :users, только для :members.

Вы не имеете прямого отношения ни от организации к пользователю, ни от пользователя к организации.

class User < ActiveRecord::Base
  has_many :members, dependent: :destroy
  has_many :organizations, through: :members
end

class Organization < ActiveRecord::Base
  has_many :members, dependent: :destroy
  has_many :users, through: :members
end

class Member < ActiveRecord::Base
   belongs_to :user
   belongs_to :organization
end

Поскольку вы не хотите удалять всех пользователей, например, из организации, просто обратитесьв организацию и наоборот, если вы удаляете пользователя, вы не хотите удалять все организации, к которым был подключен пользователь, просто ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...