2013-07-30 41 views
16

Tôi đang viết một hệ thống bảng lương sẽ tích hợp với một hệ thống đã tồn tại từ trước. Hệ thống ban đầu có một cơ sở dữ liệu chủ quản lý quản lý người dùng và cấu hình toàn cục, dưới đây có nhiều cơ sở dữ liệu giống nhau về cấu trúc, về cơ bản mỗi cơ sở dữ liệu là một cơ sở dữ liệu của các công ty, tất cả đều được liên kết với cơ sở dữ liệu chính. công ty có nhiều công ty con với bộ phận nhân sự của riêng họ. Điều tôi đang tự hỏi là có cách nào để có thể, dựa trên cookie hoặc phương pháp khác lưu trữ công ty họ muốn kết nối, tự động thay đổi cơ sở dữ liệu đích của ActiveRecord dựa trên đầu vào của họ bằng bộ lọc trước ?Sử dụng ActiveRecord trên nhiều Cơ sở dữ liệu

Dưới đây là một ví dụ:

dùng A log vào trang web, tải trang với các công ty có sẵn mà người dùng có quyền truy cập, người dùng sau đó sẽ lựa chọn một công ty, họ có đặc quyền quản trị trong công ty đó, họ thêm một nhân viên, trước khi hành động đó được chạy, đường ray sẽ chuyển kết nối đến cơ sở dữ liệu thích hợp rồi thêm bản ghi.

+0

trùng lặp có thể xảy ra [Connecting Rails 3.1 với nhiều cơ sở dữ liệu] (http://stackoverflow.com/questions/6122508/connect-rails-3-1-với-nhiều-cơ sở dữ liệu) – Heskja

Trả lời

11

Bạn có thể sử dụng ActiveRecord::Base#establish_connection để kết nối với cơ sở dữ liệu mong muốn.

Bạn có thể vượt qua các chứng chỉ db để establish_connection như một Hash

establish_connection(
    adapter: 'mysql2' 
    encoding: 'utf8' 
    pool: 5 
    username: 'me' 
    password: 'mypassword' 
) 

Có nhiều ví dụ here

+0

Bạn có thể cung cấp một ví dụ xin vui lòng? – toro2k

+0

Câu hỏi nhanh, là database.yml được nạp khi 'establish_connection' được gọi là? bởi vì tôi có thể phải tự động thêm các kết nối cơ sở dữ liệu mới thông qua một bảng điều khiển dựa trên web. – ChaoticLoki

+0

Bạn có thể chuyển thông tin đăng nhập db cho 'establish_connection' như một' Hash' – Santhosh

6

Tôi không chắc chắn bạn có thể làm điều đó trong thời gian chạy, kể từ khi kết nối cơ sở dữ liệu được kết hợp cho lớp học (mô hình)

Tuy nhiên, bạn có thể tạo các lớp khác nhau được kết nối với các cơ sở dữ liệu khác nhau Tôi không muốn sao chép câu trả lời của người khác, vì vậy, chỉ lo ok tại bài này

Connecting Rails 3.1 with Multiple Databases

và cho anh ta những tín

Chúc may mắn

Các vấn đề liên quan