Sé que llego tarde en esto, pero al tratar de averiguar cómo hacerlo yo mismo tropecé con esta pregunta.
creo que la respuesta a por qué la reapertura de clase no está funcionando como se esperaba en el código de ejemplo es que la clase se define inicialmente como:
(en model1.rb)
class Model1 < ActiveRecord::Base
y luego un re-abierta como: (en model1_section1.rb)
class Model1
es decir, la segunda definición carece de la clase heredada.
He utilizado por separado.rb para dividir mis enormes modelos, y me han funcionado muy bien. Aunque admito que solía incluir y algo más parecido a esto:
(en workcase.rb)
class Workcase < ActiveRecord::Base
include AuthorizationsWorkcase
include WorkcaseMakePublic
include WorkcasePostActions
after_create :set_post_create_attributes
# associations, etc
# rest of my core model definition
end
(en workcase_make_public.rb)
module WorkcaseMakePublic
def alt_url_subject
self.subject.gsub(/[^a-zA-Z0-9]/, '_').downcase
end
# more object definitions
end
class Workcase < ActiveRecord::Base
def self.get_my_stuff
do_something_non_instance_related
end
# more class definitions
end
Esto me ha permitido incorporar métodos de clase y objeto en cada archivo .rb incluido. La única advertencia (ya que no usé la extensión inquietudes) era que el acceso a las constantes de clase desde los métodos de objeto de módulo requería que la constante se calificara con el nombre de clase (como Workcase :: SOME_CONST) en lugar de directamente como sería permisible si se llama en el archivo primario.
En general, este enfoque parecía requerir la menor cantidad de reescritura de mi código para convertir las cosas en bloques de código manejables.
Tal vez esta no es la verdadera 'forma de Rails', pero parece funcionar muy bien en mi situación particular.
@Kaleb Brasee se supone que sea útil? ¿Estás reaccionando a los nombres de clases y métodos (completamente fabricados) o hay una razón legítima más allá de eso para un comentario sarcástico fuera del tema? – ilasno
http://en.wikipedia.org/wiki/Code_smell –
Solo busco ayuda con la sintaxis/estructura del lenguaje aquí, no refactorización u optimización, y ciertamente no para la eliminación técnica de términos. _Esto no es código real_, por supuesto huele. – ilasno