Relacionar modelos que se encuentrar en carpetas distintas

Hola

Como es posible relacionar dos modelos que se encuentran en diferentes
carpetas?
me explico mejor ya que no se si será una “burrada” lo que trato de
hacer.

tengo un modelo usuarios y un modelo noticias, fácil!!!

la cuestión es que lo quiero tener todo “ordenadito” y mi directorio
models sigue la estructura siguiente

  • models
    • comun
      • usuario.rb
        class Comun::Usuario < ActiveRecord::Base
        has_many :noticias
        end
    • comunicacion
      • noticia.rb
        class Comunicacion::Noticia < ActiveRecord::Base
        belongs_to :usuario
        end

A la hora de realizar una búsqueda con
@usuarios = Comun::Usuario.find :all
se trae correctamente los usuarios pero no posible hacer algo como
@usuarios[0].noticias.class

lo he intentado solucionar modificando el environment.rb
config.load_paths += %W(
#{RAILS_ROOT}/app/models/comun
#{RAILS_ROOT}/app/models/comunicacion )

pero me indica
Expected
/Users/afernasa/Desktop/test/config/…/app/models/comunicacion/noticia.rb
to define Noticia

Gracias por la ayuda. un saludo.

Hola,

esto pasa por saltarse las conventions de rails… si realmente tu
aplicación es muy grande y vas a organizarla modularmente, puede tener
sentido. En aplicaciones pequeñas/medianas, probablemente no sea un
problema tener todos los modelos en una única carpeta y así te
aprovechas de todo lo que rails da por supuesto (que al fin y al cabo es
uno de los grandes motivos para usar AR)

dicho lo cual :stuck_out_tongue:

en ActiveRecord el nombre que le das a la relación es únicamente eso, un
nombre para la relación. Si no indicas nada más, AR aplica la magia para
deducir qué clase quieres usar, qué campo hace de foreign_key, etc…
Pero todo eso es configurable. Mírate la doc de AR y verás que hay un
atributo parecido a class_name (o algo así) donde le indicas qué clase
es a la que debe hacer referencia. Si ahí le metes Comunicacion::Noticia
probablemente te funcione.

saludos,

javier ramírez

On 10/17/07, Fernandez S. [email protected] wrote:

models sigue la estructura siguiente
end
#{RAILS_ROOT}/app/models/comunicacion )


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

Dos soluciones:

Si quieres mantener la línea sobre los load_paths deberías eliminar el
“namespace” de las clases (Comun:: y Comunicacion:: ) ya que es el
motivo de que Rails te muestre el mensaje que te muestra.

Si quieres mantener los “namespaces” deberías eliminar la línea de los
load_paths y modificar el has_many y el belongs_to para utilizar el
parámetro :class_name para indicar a Rails que clase debe cargar para
esas asociaciones.

Suerte.

ok, muchas gracias a ambos por la ayuda y consejos.

he estado googleando buscando info sobre load_paths y class_name y
aunque para mi caso que tengo 3 modelos va a dar igual la forma de
unirlos, no termino de ver cual seria la forma mas recomendable de usar
en una aplicación ya muy grande y modular .

Un saludo.

Dos soluciones:

Si quieres mantener la l�nea sobre los load_paths deber�as eliminar el
“namespace” de las clases (Comun:: y Comunicacion:: ) ya que es el
motivo de que Rails te muestre el mensaje que te muestra.

Si quieres mantener los “namespaces” deber�as eliminar la l�nea de los
load_paths y modificar el has_many y el belongs_to para utilizar el
par�metro :class_name para indicar a Rails que clase debe cargar para
esas asociaciones.

Suerte.