Это действительно плохая идея для обработки многих БД в 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
Я думаю, вы получили идею.
Я бы не рекомендовал вам это делать. Это значительно упростит масштабируемость, если у вас много пользователей. И ваши развертывания (с миграциями) будут очень длинными. –
Но мое требование - это когда создается новый клиент. Новая БД должна быть создана, и все данные, связанные с этим пользователем, должны быть вставлены в ее БД. И клиент - это роль пользователя также с администратором и супер администратором. – Kashiftufail
'https: // github. com/kovyrin/db-charmer' может помочь. Однако это почти наверняка плохая идея. Возможно, вы могли бы дать больше аргументов за ваши требования? – DanS