Ruby on rails 删除Rails中销毁的联接表记录

Ruby on rails 删除Rails中销毁的联接表记录,ruby-on-rails,Ruby On Rails,在我的应用程序中,我拥有用户、角色和权限 删除角色时,我希望删除联接表中与该角色关联的所有用户和权限我不想删除用户或权限。 class Role < ActiveRecord::Base has_and_belongs_to_many :users, :join_table => 'users_roles' has_and_belongs_to_many :permissions, :join_table => 'roles_permissions' end 您可以在

在我的应用程序中,我拥有用户、角色和权限

删除角色时,我希望删除联接表中与该角色关联的所有用户和权限我不想删除用户或权限。

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => 'users_roles'
  has_and_belongs_to_many :permissions, :join_table => 'roles_permissions'
end

您可以在销毁回调之前使用

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => 'users_roles'
  has_and_belongs_to_many :permissions, :join_table => 'roles_permissions'
  before_destroy { users.clear }
  before_destroy { permissions.clear }
end
类角色“users_roles”
拥有且属于多个:权限,:加入\u表=>“角色\u权限”
在销毁{users.clear}之前
在销毁{permissions.clear}之前
结束

您可以在销毁回调之前使用

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => 'users_roles'
  has_and_belongs_to_many :permissions, :join_table => 'roles_permissions'
  before_destroy { users.clear }
  before_destroy { permissions.clear }
end
类角色“users_roles”
拥有且属于多个:权限,:加入\u表=>“角色\u权限”
在销毁{users.clear}之前
在销毁{permissions.clear}之前
结束

我会使用
有很多:虽然
而不是无模型的HABTM关系

它有几个优点:

  • 可以直接查询联接表
  • 您可以在连接模型上设置回调
  • 如果需要,可以将元数据添加到联接表中(例如时间戳、授予角色的人等)
首先创建一个迁移,将表从
users\u roles
重命名为
user\u roles
,因为前者会导致rails查找
users::Role
。对权限联接表执行相同的操作

class Role < ApplicationRecord
  has_many :user_roles, dependent: :destroy
  has_many :users, through: :user_roles
end

class UserRole < ApplicationRecord
  belongs_to :user
  belongs_to :role
end

class User < ApplicationRecord
  has_many :user_roles, dependent: :destroy
  has_many :roles, through: :user_roles
  has_many :user_permissions, dependent: :destroy
  has_many :permissions, through: :user_permissions
end

class UserPermission < ApplicationRecord
  belongs_to :user
  belongs_to :permission
end

class Permission
  has_many :user_permissions, dependent: :destroy
  has_many :users, through: :user_permissions
end
类角色
我会使用
有很多:虽然
而不是无模型的HABTM关系

它有几个优点:

  • 可以直接查询联接表
  • 您可以在连接模型上设置回调
  • 如果需要,可以将元数据添加到联接表中(例如时间戳、授予角色的人等)
首先创建一个迁移,将表从
users\u roles
重命名为
user\u roles
,因为前者会导致rails查找
users::Role
。对权限联接表执行相同的操作

class Role < ApplicationRecord
  has_many :user_roles, dependent: :destroy
  has_many :users, through: :user_roles
end

class UserRole < ApplicationRecord
  belongs_to :user
  belongs_to :role
end

class User < ApplicationRecord
  has_many :user_roles, dependent: :destroy
  has_many :roles, through: :user_roles
  has_many :user_permissions, dependent: :destroy
  has_many :permissions, through: :user_permissions
end

class UserPermission < ApplicationRecord
  belongs_to :user
  belongs_to :permission
end

class Permission
  has_many :user_permissions, dependent: :destroy
  has_many :users, through: :user_permissions
end
类角色