ruby on rails 3.1 - Cómo rectificar versiones en has_many/belongs_to asociación con paper_trail
ruby-on-rails-3.1 associations (2)
Uso paper_trail en rieles para rastrear las versiones de mis modelos. Pero la documentación en el repositorio de github indica que la gema no es compatible con has_many
, belongs_to
asociaciones.
Digamos que tengo una aplicación que registra los nombres de los ceos de algunas empresas:
class Company < ActiveRecord::Base
has_many :ceos
has_paper_trail
end
class Ceo < ActiveRecord::Base
belongs_to :companies
has_paper_trail
end
El ejemplo anterior representa la información de ABC Inc.
company.name => "ABC"
company.ceo.past => "John Henry"
company.ceo.present => "Amy Warren"
¿Cómo puedo implementar la siguiente operación para que restablezca los nombres de los ceos de la compañía y de la compañía a la última versión?
Las instrucciones sobre cómo manejar esto se pueden encontrar en el archivo README: https://github.com/airblade/paper_trail/blob/master/README.md#associations
Básicamente, tendrá que crear una tabla rails generate paper_trail:install --with-associations
, ya sea en el momento de la instalación con los rails generate paper_trail:install --with-associations
opción rails generate paper_trail:install --with-associations
o manualmente para que esto funcione.
Le sugiero que lea la documentación completa en Github para obtener detalles sobre cómo funciona esto.
Podría intentar volver a modelar la asociación para eliminar has_many porque, en el caso de los CEOs, una compañía puede tener muchos CEOs a lo largo de su vida, pero solo tiene un CEO por un período determinado.
La implementación de esto podría ser un has_one a una tabla de unión formada por la ID del CEO y la Compañía, y los períodos de tiempo para los que era válida.
Un efecto secundario beneficioso es que sería trivial hacer que una persona sea el CEO de una empresa 2 veces con otro CEO intermedio y que sea fácil de superar en el dominio.