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
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)
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.
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.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.