through references rails many has_one has_many has_and_belongs_to_many has example belongs and ruby-on-rails ruby database has-and-belongs-to-many

ruby-on-rails - references - rails has_one through



Tiene y pertenece a muchas relaciones con mĂșltiples bases de datos (3)

Si los datos de las empresas no cambian muy a menudo, tal vez podría sincronizar los datos en la base de datos de permisos, y luego unirse naturalmente. Un CMS que heredé hace algo así cuando la autenticación de usuario está en su propia base de datos, y los permisos y demás están almacenados allí, y las cuentas de usuario se sincronizan con la base de datos local para cada sitio. De esta forma, las cuentas de usuario podrían compartirse (especialmente para la administración) en varios sitios con 1 inicio de sesión.

Puede que no sea el mejor porque se trata de una sincronización. Idealmente, debería almacenar los datos de la compañía en los permisos db si no puede mover los permisos. A menos, por supuesto, que se una a otra empresa.

Tengo una situación donde tengo dos modelos, compañías y permisos, donde las compañías están en una base de datos separada de mi base de datos de permisos. Esto es un ha y pertenece a muchas relaciones porque cada empresa puede tener muchos permisos y cada permiso puede pertenecer a muchas compañías.

La razón por la cual las dos bases de datos se dividen es porque la base de datos de la compañía ejecuta una aplicación de producción de alta demanda y la base de datos de permisos controla los permisos para otra aplicación.

Con rieles, busca la tabla de unión en la misma base de datos que la tabla principal. Por ejemplo, si hago company.permissions, se ve en la base de datos de la compañía para company_permissions. Si hago permission.companies, busca en la base de datos de permisos.

¿Cuál es la mejor solución para usar un has y pertenece a muchas relaciones con múltiples bases de datos?



Interesante pregunta. Por el bien de mi propia referencia, permítanme intentar resumir la solución propuesta en el libro Rails Recipe en el contexto de esta pregunta.

1) Primero agrega en database.yml

permissions: adapter: mysql database: permissions username: root password: socket: /tmp/mysql.sock

2) Hacer modelo de permiso para llamar a una base de datos externa

class Permission < ActiveRecord::Base establish_connection :permissions end

3) Crear (migrar) una tabla de referencia de permisos con la columna Id de permiso

4) Utilice el modelo de PermissionReference como un enlace al modelo de Permiso

class PermissionReference < ActiveRecord::Base belongs_to :permission has_and_belongs_to_many :companies, :join_table => ''companies_permissions'', :foreign_key => ''permission_id'' end

5) Por último, asocie a la empresa al permiso

class Company < ActiveRecord::Base has_and_belongs_to_many :permissions, :class_name => ''PermissionReference'', :join_table => ''companies_permissions'', :association_foreign_key => ''permission_id'' end

Es posible que desee considerar la refactorización mediante la subclasificación de modelos que llama a una base de datos externa

class External < ActiveRecord::Base self.abstract_class = true establish_connection :permissions end class Permission < External end