2011-10-22 27 views
6

Tengo un caso posiblemente único en el que necesito un modelo para tener dos órdenes diferentes según el modelo al que esté unido. Ejemplo de la siguiente manera:Usando acts_as_list en varias columnas

class Book 
    acts_as_list :column => :genre, :scope => :genre 
    acts_as_list :column => :author, :scope => :author 
    belongs_to :genre 
    belongs_to :author 
end 

Así que básicamente lo que estoy tratando de hacer es tener un modelo de libro que forma parte de dos listas, una para la página género aparece en, y otro para el autor como aparece en.

acts_as_list Parece que no admite el uso de columnas de 2 posiciones, ya que métodos como move_to_top no le permiten especificar a qué lista mover arriba.

¿Alguien ha recibido alguna sugerencia sobre cómo podría lograr esto? En este momento estoy pensando que tendré que crear una tabla de unión como books_genres que tiene una columna position, pero realmente no estoy muy interesado en eso ya que eso requiere una carga completa de tablas adicionales.

+0

¿Alguna vez se resolvieran esto? Empecé una recompensa porque necesito la misma solución – jamesc

+0

Desafortunadamente, no pude encontrar una solución, pero no me importaría esa recompensa. –

+1

Estoy buscando exactamente la misma característica ... – MonsieurNinja

Respuesta

1

Actúa como una lista no diseñada para columnas múltiples. El plugin casi se reescribirá si desea usarlo de esta manera. Pero creo que puedes intentar hacer esto.

class Book 
    belongs_to :genre 
    belongs_to :author 
end 

class GenreBook < Book 
    acts_as_list :column => :genre, :scope => :genre 
end 

class AuthorBook < Book 
    acts_as_list :column => :author, :scope => :author 
end 

no estoy seguro que funcione. teóricamente posible.

+0

Esto funciona si solo necesita un tipo de orden cada vez que carga una colección de libros. – suweller

1

Pruebe otra gema llamada ranked-model. Admite el caso que mencionaste mediante la opción especificar: with_same. Lo he intentado yo mismo.

Para su ejemplo, se puede hacer:

class Book 
    belongs_to :genre 
    belongs_to :author 

    ranks :within_genre, 
     :with_same => :genre_id, 
     :column => :genre 

    ranks :within_author, 
     :with_same => :author_id, 
     :column => :author 
end 
2

Mensaje viejo pero espero que esto ayude. Esto funciona con act_as_list 0.7.6 al menos ...

Añadir su alcance en una matriz y utilizar los identificadores como params ...

belongs_to :website 
belongs_to :page  
acts_as_list scope: [:website_id, :page_id]