2016-07-10 2 views
1

В Rails 4.2, я знаю, что мы можем сделать:Динамические в Rails Схемы Модели

self.table_name = 'users' 

Однако, у меня есть приложение, которое имеет некоторые модели в схемах для клиента. Это не правда, много-аренда как не все модели в схемах; некоторые из них являются общими. В каждой схеме есть только частная информация, например, о пользователях.

Я знаю, что мы можем сделать:

self.table_name = 'schema_name.users' 

Однако, что если каждый schema_name отличается - на одного клиента? Я могу успешно вставить данные в таблицу пользователей одной схемы, однако в том же сеансе, если я попытаюсь вставить ее в другую, она никогда не будет там сохранена. Я думаю, что table_name кэшируется и поэтому остается установленным ...

Любые предложения? Я уверен, что это возможно в Rails.

Спасибо

ответ

0

Один из способов вы можете пойти, это использовать камень Apartment, что делает все это и обрабатывает общие таблицы через разные арендаторы, проверить его на https://github.com/influitive/apartment

Другой способ, чтобы установить схема в контроллере, прежде чем попасть в базу данных, что-то вроде:

User.table_name = 'schema_name.users' 
+0

Благодарим вас за ответ. Что, если это было для создания через модель, однако? Я проверю Квартиру ... –

+0

Если у меня есть модель пользователя, перед созданием я запустил это 'User.table_name = 'schema_name.users'' – neydroid

+0

О, потрясающе! Поэтому у меня было 'before_action' в' ApplicationController', который вызывает 'set_runtime_organization', который читает из файла cookie организации. Оттуда я могу сделать «ModelName.table_name =« # {schema_name} .model_name' в качестве примера. Это должно работать нормально, я уверен ... –