2011-01-07 10 views
31

Tengo más de 100 modelos en mi aplicación de rieles, y solo para organización, los estoy dividiendo en carpetas, todos aún debajo de la carpeta del modelo principal, solo para que sea más fácil navegar en el proyecto y ver archivos relacionados .¿Es una mala idea dividir los modelos en directorios?

¿Es esta una mala idea? ¿Cuál es la manera de hacer esto?

+0

Más de 100 modelos? ¿Es un gran proyecto? –

Respuesta

62

No, no es una mala idea. Mucha gente lo hace y no podría vivir sin él en aplicaciones grandes.

Hay dos maneras de hacerlo:

La primera es simplemente mover sus modelos. Sin embargo, tendrá que decirle a Rails que cargue los modelos caprichosos (ya que no sabrá dónde están). Algo como esto debe hacer el truco:

# In config/application.rb 
module YourApp 
    class Application < Rails::Application 
    # Other config options 

    config.autoload_paths << Dir["#{Rails.root}/app/models/*"] 
    end 
end 

La primera manera es fácil, pero no es realmente la mejor manera. La segunda forma consiste en namespacing sus modelos con los grupos que se encuentran. Esto significa que en lugar de tener User y UserGroup y UserPermissions, tiene User, User::Group y User::Permission.

Para usar esto, genere un modelo como este: rails generate model User::Group. Rails creará automáticamente todas las carpetas por usted. Un beneficio adicional es que con este enfoque, usted no tendrá que deletrear el nombre del modelo completo para asociaciones dentro de un espacio de nombres:

class User < ActiveRecord::Base 
    belongs_to :group # Rails will detect User::Group as it's in the same namespace 
end 

class User::Group < ActiveRecord::Base 
    has_many :users 
end 

Puede especificar sin embargo muchos niveles de los espacios de nombre como desee, por lo que habría User::Group::Permission posible.

+0

No tiene que agregar los subdirectorios a la ruta de carga ya que la aplicación/modelos ya está allí. Al hacer referencia a un modelo anidado como 'User :: Group', Rails lo cargará automáticamente al buscar en estas rutas. Todas las constantes 'app' están ansiosas cargadas en modo de producción. –

+0

@Ryan Sí, si espacio de nombres de sus modelos. Si * no * espacio de nombres, pero todavía los coloca en subcarpetas, sin embargo, y no agrega las rutas a 'config. autoload_paths', no se cargarán. – vonconrad

16

Para 100 modelos, es prácticamente un requisito. 100 modelos son ruidosos en un directorio.

probar este para tener una idea de los carriles Way (TM)

rails new MultiDirectoryExample 
cd MultiDirectoryExample 
rails generate scaffold User::Photo description:string 

reloj de salida de la secuencia de comandos y ver los archivos generados.

Cuestiones relacionadas