2011-05-02 30 views
29

Estoy usando Ruby on Rails 3 y me gustaría manejar los espacios de nombres de modelos (clases) dentro de los espacios de nombres. Es decir, si tengo un espacio de nombres llamado NS1 y un "espacio de nombres secundario" de ese espacio de nombres llamado NS2, me gustaría manejar modelos (clases) en NS2.Manejando modelos de espacio de nombres (clases) en el espacio de nombres

Si me quedo un andamio

rails generate scaffold ns1/ns2/Article id:integer title:string 

que generará siguientes archivos de modelo:

models/ns1/ns2/article.rb file 
models/ns1/articles.rb 

El models/ns1/articles.rb contiene:

module Ns1::Articles 
    def self.table_name_prefix 
    'ns1_articles_' 
    end 
end 

¿Cuál es el archivo models/ns1/articles.rb? ¿Cómo y por qué puedo usar eso? ¿Tienes consejos sobre cómo usar eso?

Y, en general, ¿cuál es la "mejor" forma de manejar clases "compuestas" en espacios de nombres usando Ruby on Rails?

Respuesta

28

El

modelos/NS1/articles.rb

está estableciendo básicamente el nombre de prefijo de tabla para todas las clases del modelo bajo ese espacio de nombres. Ese es su uso. Es más DRY'ish hacer allí (en un solo archivo), en lugar de establecer el prefijo en cada clase de modelo debajo de ese espacio de nombres.

No soy un gran admirador de usar espacios de nombres en mis modelos. Sin embargo, puede consultar los siguientes artículos para obtener una mejor comprensión sobre el uso de espacios de nombres en los módulos.

Algunas alternativas al uso de espacios de nombres en modelos

Espero que esto ayude.

+3

¿Qué sucede si quiere tener un modelo llamado ns1? ¿Que haces entonces? – picardo

+0

modelos/ns1/ns1.rb –

+1

¿por qué no eres fanático de los modelos de espacio de nombres? – Lichtamberg

Cuestiones relacionadas