2014-09-01 6 views
0

i m с использованием mysql2 в качестве базы данных и разработки для аутентификации пользователей.как использовать базу данных по умолчанию для входа пользователя, но после входа в систему использовать другую базу данных с рельсами

before_action :authenticate_partner! 

У меня есть эта строка в приложении application_controller.rb, поскольку рекомендуется использовать драгоценный камень.

У меня всего 6 таблиц.

2 из них находятся в моей базе данных по умолчанию, а одна из них - таблица партнеров, созданная при разработке.

Что я хочу, так это; когда user_signed_in? возвращает true. Я хочу установить новое соединение на основе имени пользователя.

У меня есть несколько контроллеров, и я не хотел создавать метод установления соединения для каждого из них.

Итак, как я могу сохранить свой пользователь в безопасности и использовать разные базы данных?

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 

Этот код, очевидно, дает мне ошибку, когда я удалить Защиту find_user_name, но я не могу показаться, чтобы получить в любом из если заявления (проверяются с logger.info)

Так что я должен делать?

+0

Я думаю, вы пытаетесь создать приложение для нескольких арендаторов. Это довольно сложная задача для новичков;) –

+0

хорошо, но мы все новичок в чем-то :) Я узнаю, когда я подталкиваю себя к пределу. Это может быть плохой подход, но я изучаю лучшее таким образом. Спасибо за heads up tho – railsnewbie

+0

Это выглядит актуальным http://stackoverflow.com/questions/1298909/multiple-database-connection-in-rails –

ответ

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.