2014-09-01 20 views
0

我使用mysql2作爲數據庫和用於用戶身份驗證的設計。如何使用默認數據庫進行用戶登錄,但在登錄後使用另一個帶有導軌的數據庫

before_action :authenticate_partner! 

我在application_controller.rb中有這行代碼,就像設計好的gem建議的那樣。

我總共有6個表格。

其中2個是在我的默認數據庫中,其中一個是由devise創建的合作伙伴表。

我想要的是這個;什麼時候user_signed_in?返回true我想根據用戶名建立一個新的連接。

我得到了多個控制器,我不想爲它們中的每一個創建一個establish_connection方法。

那麼如何讓我的用戶安全並使用不同的數據庫?

class ApplicationController < ActionController::Base 
    before_action :authenticate_partner! 
    protect_from_forgery with: :exception 

    def find_user_name 
    if partner_signed_in? 
     ActiveRecord::Base.establish_connection(                                 
     :adapter => "mysql2",                                      
     :database => "db_#{current_partner.name} " 
     ) 
    else 
     logger.info "log in not succesful" 
    end 
    end 
end 

顯然這個代碼給我錯誤,當我DEF find_user_name,但我似乎移除不能在任一拿到if語句(與logger.info選中)

那麼,應該怎麼辦?

+0

我想你正在嘗試構建一個多租戶應用程序。對於一個新手來說,這是相當複雜的事情;) – 2014-09-01 16:28:54

+0

好吧,我們都是新手在做些什麼:)我學會了什麼時候把自己逼到了極限。這可能是一種壞方法,但是我以這種方式學習了最好的方法。感謝擡起頭來 – railsnewbie 2014-09-01 16:41:53

+0

這看起來相關http://stackoverflow.com/questions/1298909/multiple-database-connection-in-rails – 2014-09-01 16:43:14

回答

1

您可以使用remove_connection

old_connection = ActiveRecord::Base.remove_connection 

如果你已經做了

new_connection = ActiveRecord::Base.establish_connection(...) 

這可以傳遞給remove_connection

old_connection = ActiveRecord::Base.remove_connection(new_connection) 

查看詳細code