다른 프로젝트에 외부 사용자 데이터베이스를 사용하고 있습니다.레일 프로젝트에서 두 개 이상의 데이터베이스 사용
이제 내 프로젝트에 School 모델이 있는데, has_many 사용자와 사용자에게 많은 학교가 있습니다.
class User < ActiveRecord::Base
establish_connection "#{RAILS_ENV}_tunnel"
has_many :memberships
has_many :schools, :through => :memberships
end
class School < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :school
end
그래서이 지금 어떤 문제 : (회원 테이블이 아닌 exernal 사용자 DB에, 내 프로젝트의 DB에 있기 때문에), 그러나
이- 내가 school.users를 호출 할 수 없습니다 나는 사용자가 호출 할 수 있습니다 .schools
- 이렇게하면 읽기 전용으로 연결이 열리기 때문에 current_user.school.find (params [: id]). update_attributes (params [: school])와 같이 업데이트 할 수 없습니다. 나는이 문제를 해킹 할 수 방법을 이해
, 즉 I는 다음과 같이 호출 할 수 있습니다
school.users :
class School < ActiveRecord::Base
has_many :memberships
# has_many :users, :through => :memberships
def users
User.where("users.id in (?)", self.connections.map(&:user_id))
end
end
그러나 이것은 해킹은 충분하지 않습니다. 이제는 school.users << User.find(203)
또는 school.users.find(params[:user_id])
과 같은 사용자를 추가 할 수 없기 때문에 has_many 관계가 저에게 제공합니다.
그래서 은 전 기능 지원을 통해 많은 관계로 서로 연결된 두 데이터베이스로 작동하는 방법입니다.
+1 두통에 걸릴 가능성이 적은 간단한 솔루션처럼 들립니다. – Jeriko
매우 흥미 롭습니다. 그러나 원점과 테이블 복사본을 얼마나 빨리 동기화 할 수 있습니까? – fl00r
@ fl00r - 테이블의 복사본이 아닙니다. 다른 데이터베이스에 직접 연결되므로 동기화가 문제가되지 않습니다. – Codebeef