2014-08-30 18 views
0

正如我所解釋的,我想基於用戶使用不同的數據庫。如何在database.yml中創建if語句以使用基於rails中當前用戶的不同數據庫

我得到了一個用devise創建的合作伙伴表,我有多個我創建的數據庫。這些數據庫的每個人都有相同的模式和相同的關係。

什麼,我想完成的是一樣的東西

default: &default 
    adapter: mysql2 
    pool: 5 
    timeout: 5000 

development: 
    <<: *default 
    database: db_ <%= current_partners%> 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    <<: *default 
    database: db_ <%= current_partners%> 

production: 
    <<: *default 
    database: db_ <%= current_partners%> 

爲什麼我不能用這個說法?

順便說一句我使用mysql2中看到的代碼片段。

回答

1

在你的database.yml,只要提到默認的數據庫配置。每當你想在數據庫之間切換時,在打到相應的數據庫之前,調用用戶定義的switch_database方法連接到另一個數據庫。例如:

def switch_database 
    establish_connection (
    :adapter => "mysql2", 
    :host  => "another_host_name", 
    :username => "username", 
    :password => "password", 
    :database => "db_#{current_partner}" 
) 
end 

將上述方法放在合適的文件中,方便您調用它。

0

database.yml在應用程序啓動時加載,因此這些變量如current_partners目前不可用,因爲它們是請求特定的。您需要創建database.yml中的所有數據庫,然後告訴導軌在控制器中使用哪一個。然而,這可能會導致很多併發問題(不確定,但實際上從來沒有這樣做 - 見下文)。

但請注意,這並不是最佳實踐。爲什麼不有partners模型,然後有一個關聯呢?

+0

我確實有一個合作伙伴模型,但我會有巨大的表格,我希望它們能夠更快,更快地響應查詢。我該如何使用它? – railsnewbie 2014-08-30 16:53:51

+0

只需將foreign_keys索引到合作伙伴模型,並且全部將非常快速。 – BroiSatse 2014-08-30 17:01:32

0

您可能想要檢出這些可幫助您在Rails應用程序here中實現多租戶的寶石。

Apartment是一款非常活躍且基於機架的數據庫多租戶紅寶石寶石。我希望它有幫助。

相關問題