¿Cuál es la forma recomendada de extender el comportamiento de clase, a través de class_eval
y módulos (no por herencia) si quiero extender una clase enterrada en una gema de una aplicación de Rails 3?¿Cómo/cuándo/dónde extender las clases de gemas (a través de class_eval y módulos) en Rails 3?
Un ejemplo es la siguiente:
Quiero añadir la capacidad de crear enlaces permanentes para las etiquetas y categorías (a través de la ActsAsTaggableOn y gemas ActsAsCategory).
Han definido los modelos Tag
y Category
.
que quiero hacer básicamente esto:
Category.class_eval do
has_friendly_id :title
end
Tag.class_eval do
has_friendly_id :title
end
Incluso si hay otras maneras de añadir esta funcionalidad que podrían ser específicos de la gema, ¿cuál es la forma recomendada de añadir el comportamiento de las clases en una Carriles 3 aplicación como esta?
Tengo algunas otras gemas que he creado para las que quiero hacer esto, como un modelo Configuration
y un modelo Asset
. Me gustaría poder agregar crear una clase de modelo app/models/configuration.rb
a mi aplicación, y actuaría como si acabara de hacer class_eval
.
De todos modos, ¿cómo se supone que funciona? No puedo encontrar nada que cubra esto de ninguno de los blogs/docs/gists actuales de Rails 3.
tengo el mismo problema, me sale 'LoadError: aplicación/modelos/tag.rb esperados para definir Tag' – MhdSyrwan
MhdSyrwan: Significa que dentro de su archivo 'tag.rb', la primera clase que se debe definir debe llamarse exactamente "Etiqueta", así que parece que no lo nombraste de la manera correcta. –