2012-05-21 5 views
0

Я использую Rails 3 и хочу, чтобы всякий раз, когда пользователь будет создан, затем необходимо создать базу данных для вновь созданного пользователя.Как создать отдельную базу данных для каждого пользователя

например, если в моем приложении 13 миграции, поэтому для вновь созданного пользователя должно быть создано 13 таблиц.

Как я могу достичь этой функциональности?

+2

Я бы не рекомендовал вам это делать. Это значительно упростит масштабируемость, если у вас много пользователей. И ваши развертывания (с миграциями) будут очень длинными. –

+0

Но мое требование - это когда создается новый клиент. Новая БД должна быть создана, и все данные, связанные с этим пользователем, должны быть вставлены в ее БД. И клиент - это роль пользователя также с администратором и супер администратором. – Kashiftufail

+0

'https: // github. com/kovyrin/db-charmer' может помочь. Однако это почти наверняка плохая идея. Возможно, вы могли бы дать больше аргументов за ваши требования? – DanS

ответ

0

Это действительно плохая идея для обработки многих БД в Rails!

Вы можете добавить поле, скажем, user_id в каждом из таблиц, которые необходимы, чтобы быть разделено, а затем применить default_scope к соответствующим моделям (или сделать абстрактную модель с default_scope через self.abstract_class = true и наследовать вашу «разделяемую» модель от Это).

Ваш default_scope, как вы можете догадаться, должна выглядеть следующим образом:

default_scope lambda { where(user_id: current_user_id) } 

Как получить текущего пользователя, вы можете спросить?

Модель не может получить доступ к session, так что вы можете сделать следующее «взломать», чтобы ваши возможности для работы:

#in ApplicationController 
before_filter do 
    user_id = session[:user_id] 
    ActiveRecord::Base.class.send :define_method, :current_user_id, lambda { user_id } 
end 

Я думаю, вы получили идею.

0

Это лучший пост я следовать, и решить мою проблему

http://7fff.com/2010/12/02/activerecord-dropcreate-database-run-migrations-outside-of-rails/ 
Смежные вопросы