Si tenemos que usar BD ya existentes y no podemos adaptarlas a Rails… tendremos que adaptar rails a la BD.
Tenemos las siguientes relaciones en la BD
| Equipos | Equiposprotocolos | Protocolos |
| pkequipos | pkequiposprotocolos | pkprotocolos |
| fkequipos | ||
| fkprotocolos |
Ahora vamos a crear los modelos para relacionar esta tablas con la siguiente advertencia:
IMPORTANTE: El nombre del modelo de la tabla intermedia DEBE DE SER SINGULAR!!!!
Vamos a ver como quedaría
equipos.rb
-
class Equipos < ActiveRecord::Base
-
set_table_name "equipos"
-
set_primary_key "pkequipos"
-
-
has_many :equiposprotocolo , :foreign_key => "fkequipos"
-
has_many :protocolos, :foreign_key => "fkprotocolos", :through => :equiposprotocolo
-
end
equiposprotocolo.rb
-
class Equiposprotocolo < ActiveRecord::Base
-
#IMPORTANTE!!! Tanto el nombre del archivo como el de la clase tienen que ser en singular para las tablas de unión!!!!
-
set_table_name "equiposprotocolos" # El nombre de la tabla en la base de datos no importa
-
set_primary_key "pkequiposprotocolos"
-
-
belongs_to :equipos , :foreign_key => "fkequipos"
-
belongs_to :protocolos , :foreign_key => "fkprotocolos"
-
end
protocolos.rb
-
class Protocolos < ActiveRecord::Base
-
set_table_name "protocolos"
-
set_primary_key "pkprotocolos"
-
-
has_many :equiposprotocolo , :foreign_key => "fkprotocolos"
-
has_many :equipos, :foreign_key => "fkequipos", :through => :equiposprotocolo
-
end
Con esto podemos hacer por ejemplo
-
Equipos.find(1).protocolos
-
Protocolos.find(1).equipos
Espero que os sea de utilidad
