Tengo problemas para nombrar un módulo que incluyo en un modelo.Módulos y rails espaciados por nombres 3.1.3 autoload_path
en /app/models/car.rb
class Car
include Search::Car
end
en /lib/search/car.rb
module Search
module Car
include ActiveSupport::Concern
# methods in here
end
end
en /config/application.rb
config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.autoload_paths += Dir["#{config.root}/lib/search/*"]
Lo extraño es que no recibo ningún error directamente cuando enciendo el servidor. Pero si actualizar el navegador después de un tiempo me sale este error:
Expected #{Rails.root}/lib/search/car.rb to define Car
La naturaleza del problema indica que tiene algo que ver con:
/config/environments/development.rb
config.cache_classes = false
también intenté poner un archivo directamente en search.rb
/lib
donde defino Search
:
module Search
# Put shared methods here
end
¿Qué estoy haciendo mal?
ACTUALIZACIÓN:
Ok, resulta que si cambio el nombre de Search::Car
-Search::CarSearch
funciona. ¿No es posible tener Módulos/Clases del mismo nombre en un ámbito diferente?
Usted puede tener módulos/Clases del mismo nombre en diferentes ámbitos, pero luego cuando se utiliza los métodos módulo de coches, debe especificar el alcance para eliminar la ambigüedad. –
Oye, gracias por tu comentario. Yo también lo pensé, pero parece que no funciona. ¿Alguna idea de por qué me sale el error? – Yeggeps