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
类角色