문제

회사가 권한 데이터베이스와 별도의 데이터베이스에있는 두 가지 모델, 회사 및 권한이있는 상황이 있습니다. 각 회사는 많은 권한을 가질 수 있으며 각 권한은 많은 회사에 속할 수 있기 때문에 많은 관계에 속하며 많은 관계에 속합니다.

두 데이터베이스가 분할 된 이유는 회사 데이터베이스가 높은 수요 생산 응용 프로그램을 실행하고 권한 데이터베이스가 다른 응용 프로그램에 대한 권한을 제어하기 때문입니다.

Rails를 사용하면 기본 테이블과 동일한 데이터베이스의 조인 테이블을 찾습니다. 예를 들어, Company.Permissions를 수행하면 Company_Permissions의 회사 데이터베이스에서 볼 수 있습니다. 허가를 받으면 권한 데이터베이스가 있습니다.

HAS를 사용하는 가장 좋은 솔루션은 여러 데이터베이스와의 많은 관계에 속하며 속한 것은 무엇입니까?

도움이 되었습니까?

해결책

많은 사람들이 가지고 있고 속한다. 대신 has_many를 사용하는 것이 좋습니다. ": Through"옵션으로 관계 테이블을 지정할 수 있습니다. 상주하려는 데이터베이스를 선택하고이를 표현할 모델을 작성하십시오.http://apidock.com/rails/activerecord/associations/classmethods/has_many

다른 팁

흥미로운 질문. 내 참조를 위해 제안 된 솔루션을 요약 해 보겠습니다. 레일 레시피 이 질문의 맥락에서 예약하십시오.

1) 먼저 추가하십시오 database.yml

permissions:
  adapter: mysql
  database: permissions
  username: root
  password: 
  socket: /tmp/mysql.sock

2) 외부 데이터베이스를 호출 할 수있는 권한 모델을 작성하십시오

class Permission < ActiveRecord::Base

  establish_connection :permissions

end 

3) 생성 (마이그레이션) a 권한 참조 테이블 ~와 함께 권한 ID

4) 사용 허가 회의 링크로 모델 허가 모델

class PermissionReference < ActiveRecord::Base

  belongs_to :permission
  has_and_belongs_to_many :companies,
                          :join_table => 'companies_permissions',
                          :foreign_key => 'permission_id'

end

5) 마지막으로 회사의 권한을 부여합니다

class Company < ActiveRecord::Base

  has_and_belongs_to_many :permissions, 
                          :class_name => 'PermissionReference', 
                          :join_table => 'companies_permissions', 
                          :association_foreign_key => 'permission_id'

end

외부 데이터베이스를 호출하는 서브 클래싱 모델로 리팩토링을 고려할 수 있습니다.

class External < ActiveRecord::Base

  self.abstract_class = true
  establish_connection :permissions

end

class Permission < External
end

회사 데이터가 자주 변경되지 않으면 데이터를 권한 데이터베이스에 동기화하고 자연스럽게 가입 할 수 있습니다. 내가 상속받은 CMS는 사용자 인증이 자체 데이터베이스에있는 곳과 같은 작업을 수행하고 있으며 권한 및 해당 권한이 모두 저장되며 사용자 계정은 각 사이트의 로컬 데이터베이스와 동기화됩니다. 이 방법으로 1 개의 로그인이있는 여러 사이트에서 사용자 계정을 공유 할 수 있습니다 (특히 관리 용).

동기가 관련되어 있기 때문에 최선이 아닐 수 있습니다. 이상적으로는 권한을 옮길 수없는 경우 회사 데이터를 권한 DB에 저장해야합니다. 물론 다른 곳에서 회사에 합류하지 않는 한.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top