Каков наилучший способ подключения к базе данных для каждого пользователя в Rails?

StackOverflow https://stackoverflow.com/questions/58755

  •  09-06-2019
  •  | 
  •  

Вопрос

Каков наилучший способ подключения к базе данных для каждого пользователя в Rails?

Я понимаю, что это плохая практика проектирования Rails, но мы постепенно заменяем существующее веб-приложение, которое использует одну базу данных для каждого пользователя.Полное перепроектирование/переписывание невозможно.

Это было полезно?

Решение

Поместите что-то подобное в свой контроллер приложения.Я использую поддомен плюс «_clientdb», чтобы выбрать имя базы данных.У меня все базы данных используют одно и то же имя пользователя и пароль, поэтому я могу получить их из файла конфигурации БД.

Надеюсь это поможет!

class ApplicationController < ActionController::Base

  before_filter :hijack_db

  def hijack_db
    db_name = request.subdomains.first + "_clientdb"

    # lets manually connect to the proper db
    ActiveRecord::Base.establish_connection(
      :adapter  => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['adapter'],
      :host     => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['host'],
      :username => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['username'],
      :password => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['password'],
      :database => db_name
    )
  end
end

Другие советы

Взгляни на ActiveRecord::Base.install_connection.Вот как вы подключаетесь к другому серверу базы данных.Я не могу больше помочь, так как не знаю, как вы узнаете пользователя или сопоставляете его с его базой данных, но я полагаю, что эта информация будет храниться в главной базе данных (а информация о соединении должна находиться в файле data.yml). ).

Удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top