) 내 응용 프로그램의 DB 관계를 디자인하는 가장 좋은 방법을 찾으려고합니다. 나는 many-to-many 관계를 가지고 있습니다. 그러한 관계의 예가 다음과 같습니다.다 대다 관계에 대한 조인 테이블과 함께 Rolify 사용 (
class User < ApplicationRecord
has_many :groups_users
has_many :groups, through: :groups_users
end
class Group < ApplicationRecord
has_many :groups_users
has_many :groups, through: :groups_users
end
class GroupsUser < ApplicationRecord
belongs_to :group
belongs_to :user
end
이렇게하면 어떤 사용자가 어떤 그룹에 속하는지 정의 할 수 있습니다. 그러나 그룹에 대한 액세스 수준이 무엇 인지도 알아야합니다. 그래서 groups_users 테이블에 나는이 모든 설정이 잘 작동 그룹의 관리자, 나는
u = User.find(34)
g = Group.find(22)
gu = u.groups_users.where(:group => g).first
gu.update(admin: true)
같은 것을 할 거라고 사용자를 만들고 싶었다 경우 등 관리자, 기여, 같은 추가 속성이 있지만 Rolify를 사용하고 있는데이 상황에서 적용될 수있는 것처럼 보입니다.
u = User.find(34)
g = Group.find(22)
u.add_role(:admin, g)
나는 그래서 내가이 작업을 수행 할 수 있고 제거 생각 Rolify의 아이디어를 좋아하지 : Rolify은 제가 이런 짓을 했을까 위를 이렇게하려면, 클래스의 인스턴스에 대한 사용자의 역할을 설정할 수 있습니다 조인 테이블의 추가 속성 하지만 지금은 사용자가 어떤 그룹 (u.groups
)을 가지는지 조인 테이블을 사용하고 있기 때문에 믹싱과 매칭을하고있는 것처럼 느껴지고 있습니다. 그런 다음 Rolify를 사용하여 각 그룹에 대한 액세스 수준을 어떻게 든 얻으려고합니다. 어쩌면 그렇게 할 수있는 방법 일지 모르지만, Rolify를 사용하고 조인 테이블을 모두 제거 할 수 있다는 생각이 들었습니다. 다음과 같이 말하면 "기본"역할을 추가하기 만하면됩니다. 그래서 u.groups
을 사용하여 사용자 그룹을 얻는 대신 Group.with_role(:member, u)
을 할 것입니다. 나는 u.groups = [g1, g2, g3]
과 같은 일을 할 수있는 능력이 없지만 각 그룹에 대한 사용자 액세스 수준을 설정하기 위해 이미 약간 혼란 스러울 것입니다.
그래서이 작업을 수행하는 방법에 대한 권장 사항을 찾고있는 것 같습니다. 나는 사용자와 관련된 많은 일대 다 관계를 가지고 있으며 Rolify를 사용하여 그 모든 것을 처리 할 생각을 좋아하므로 조인 테이블과 클래스가 많지는 않지만 Rolify에 새로운 사람으로 (그리고 처음에는이 전문가의 전문가가 아닙니다.)이 방법으로 함정을 놓치고 있는지 확실하지 않습니다.