ruby-on-rails-3.1 associations has-many paper-trail-gem

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.