사용자 계정과 세션 데이터를 별도의 데이터베이스로 이동하려고하므로 결국 여러 응용 프로그램간에 공유 할 수 있습니다.establish_connection이 조인을 지원하지 않는 것 같습니다.
온라인으로 많은 사람들이 establish_connection
을 사용하여 모델에 다른 데이터베이스에 연결하도록 알려주고 있지만이 기능을 사용할 수는 없습니다.
설정/database.yml을
development:
adapter: mysql2
encoding: utf8
reconnect: true
pool: 5
host: localhost
database: project_name_development
authentication:
adapter: mysql2
encoding: utf8
reconnect: true
pool: 5
host: localhost
database: authentication
응용 프로그램/모델/user.rb
class User < ActiveRecord::Base
establish_connection :authentication
has_one :person
end
응용 프로그램/모델/person.rb
class Person < ActiveRecord::Base
belongs_to :user
end
이 많이 작동하는 것 같군 :
> User.connection.instance_eval { @config[:database] }
=> "authentication"
> Person.connection.instance_eval { @config[:database] }
=> "project_name_development"
을 나는 고립 User
을 조회 할 수 있습니다
> User.joins(:person)
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'authentication.people' doesn't exist: SELECT `users`.* FROM `users` INNER JOIN `people` ON `people`.`user_id` = `users`.`id`
ARel을 : 나는 그것을 나누기 join
를 사용하려고 즉시
> User.where(:admin => true)
=> [ ... lots of results .. ]
하지만, 반영을 통해 올바른 데이터베이스를 얻는 대신 현재 데이터베이스를 사용하는 것 같습니다.
거의 2 년 전이 문제에 대해 this very old bug report이 발견되었지만 이전 ARel 구문과 관련하여 거의 확실합니다. 코드 예제가 더 이상 작동하지 않을 것입니다.
이것도 가능합니까?
업데이트는 :
User.joins("INNER JOIN project_name.people ON project_name.people.user_id = authentication.users.id")
을하지만 정말 지루, 내가 가입하고자하는 테이블 중 하나가 다형성 :이 작업을 수행하여 약간의 전진했다.
내가 추가하는 시도 :set_table_name 'project_name.people'
을하지만 Rails3 실제로 여러 스키마를 지원하지 않는 날 것으로 보인다
NoMethodError: undefined method `eq' for nil:NilClass
를 반환합니다. 내가 잘못?
내 2.3 사이트를 rails3에 이식하려고 할 때 동일한 문제가 있음을 확인했습니다. Arel 2.0.6은 원래 데이터베이스에 대한 연결을 유지 관리하고 db가 establish_connection을 사용하여 변경 될 때를 알지 못합니다. Arel HEAD가 개선 된 것처럼 보이지만 다른 오류를 발견했습니다. 레일 3.0.4 가져 오기 ... –
레일 정말 지원하지 않습니다. – jschorr
@karudzo Rails API 문서에서는 ActiveRecord가 여러 DB 사용을 지원한다고 말합니다.'join '을 사용할 수 없다면 그건 내 책에서'지원 '으로 인정받지 못합니다. –