2010-03-19 17 views
6

Estoy tratando de aprovechar la función de contador de caché de los rieles pero no puedo captarla por completo.Rails Counter Cache y su implementación

Supongamos que tenemos 3 modelos

A B C

A pertenece a B o C dependiendo de un campo key_type y id_clave. key_type dice si A pertenece a B o C de modo que si key_type = "B" entonces el registro pertenece a B de lo contrario, pertenece a C.

En mi modelo a.rb, he definido siguientes asociaciones:

belongs_to :b, :counter_cache => true, :foreign_key => "key_id" 
belongs_to :c, :counter_cache => true, :foreign_key => "key_id" 

y

en B y C archivos de modelo

has_many :as , :conditions => {:key_type => "B"} 
has_many :as , :conditions => {:key_type => "C"} 

Tanto B y C modelos tienen una columna como as_count

El problema es que cada vez que se crea un objeto de a se aumenta el conteo tanto en los modelos byc.

Cualquier ayuda es apreciada. Inicialmente pensé que esto podría funcionar:

belongs_to :b, :counter_cache => true, :foreign_key => "key_id", :conditions => {:key_type => "B"} 
belongs_to :c, :counter_cache => true, :foreign_key => "key_id", :conditions => {:key_type => "C"} 

Pero esto no ayuda.

Gracias

+0

Esto no se debe etiquetar con "griales". – Fletch

Respuesta

15

Parece que las asociaciones polimórficas son el camino a seguir para su emisión.

Imagine que tiene un modelo de comentario y 2 modelos que se pueden comentar: Publicación y Perfil.

en su puesto y del perfil modelos:

has_many :comments, :as => :resource 

En el modelo Comentario:

belongs_to :resource, :polymorphic => true, :counter_cache => true 

No se olvide de añadir la columna "comments_count", tanto en los modelos de Correos y el perfil y listo!

+0

Solo funciona al agregar comentarios. La cuenta de comentarios aumenta, pero cuando se elimina un comentario no se actualizará la cuenta de comentarios. ¿Alguna idea de por qué esto podría estar sucediendo? alguna posible solución? Gracias. –

+0

parece que hay un error con counter_cache y relaciones polimórficas en rieles <5.0. Ver https://github.com/rails/rails/issues/16407 – John

Cuestiones relacionadas