Tabla intermedia N:M

Tengo una relación N:M
temas <–N:M --> proyectos
He añadido el has_and_belongs_to_many en cada modelo, Active Record me
buscará una tabla nombrada como temas_proyectos, ¿cómo creo esta tabla
intermedia?, se puede hacer con una migración u opto por el Phpmyadmin?

Gracias

Mejor con una
migración.
Recuerda que al crear la tabla unión deberás especificar :id =>
:false, ya que no tiene que tener campo “id”. Los únicos campos que
debe tener son:

tema_id
proyecto_id

Pero ojo, ActiveRecord buscará una tabla llamada proyectos_temas, ya
que la tabla unión se nombra a partir de los nombres de las tablas en
orden alfabético.

Salu2,

Javi

El 28/08/07, Miguel Angel Calleja Lázaro [email protected]
escribió:> Tengo una relación N:M

Javier Vidal P.
escribió:

orden alfabético.

buscará una tabla nombrada como temas_proyectos, ¿cómo creo esta tabla


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

Aha, si bueno, esa idea la había contemplado, lo que no se es si es
necesario poner que los dos campos son primary key o no hace falta?

On Aug 28, 2007, at 7:25 AM, Javier Vidal P. wrote:

No, no hace falta.

Aha, si bueno, esa idea la había contemplado, lo que no se es si es
necesario poner que los dos campos son primary key o no hace falta?

Pero recuerda agregar los indices apropiados…

No, no hace falta.

El 28/08/07, Miguel Angel Calleja Lázaro [email protected]
escribió:> Javier Vidal P. escribió:

Sebastian D.
escribió:

Me parecía raro que no se tuvieran que crear, te importaría decirme cómo
se pueden crear los índices en la
migración?

Jaime Mora R. escribió:

Espero te sirva.

Jaime Mora R.

Aha, muchas gracias, ahora me ha surgido la duda de cómo puedo insertar
los valores en esta tabla, con una consulta de sql a pelo? o a través de
un modelo? En este caso tendría que hacer un modelo que me buscara mi
tabla “proyectos_categorias”, no? Gracias por vuestra ayuda

Miguel Angel Calleja Lázaro wrote:

Me parecí¡ raro que no se tuvieran que crear, te importarí¡ decirme có­¯
se pueden crear los í®¤ices en la
migració®¿Š

class AddIndexToUser < ActiveRecord::Migration

def self.up
add_index :notes, :user_id
end

def self.down
remove_index :notes, :user_id
end

end

Espero te sirva.

Jaime Mora R.

Miguel Angel Calleja Lázaro wrote:

Aha, muchas gracias, ahora me ha surgido la duda de cómo puedo insertar
los valores en esta tabla, con una consulta de sql a pelo? o a través de
un modelo? En este caso tendría que hacer un modelo que me buscara mi
tabla “proyectos_categorias”, no? Gracias por vuestra ayuda

class CreateUsuarios < ActiveRecord::Migration
def self.up
create_table “grupos”, :force => true do |t|
t.column “nombre”, :string, :limit => 80
end

Grupo.create :nombre => “admin”
Grupo.create :nombre => “demo”
Grupo.create :nombre => “report”
Grupo.create :nombre => “sales”
Grupo.create :nombre => “user”

create_table “usuarios”, :force => true do |t|
t.column “login”, :string, :limit => 80
end

Usuario.create :login => “erik”
Usuario.create :login => “george”
Usuario.create :login => “jack”
Usuario.create :login => “lori”
Usuario.create :login => “sara”

create_table “permisos”, :id => false, :force => true do |t|
t.column “grupo_id”, :integer, :default => 0, :null => false
t.column “usuario_id”, :integer, :default => 0, :null => false
end
end

def self.down
drop_table :grupos
drop_table :usuarios
drop_table :permisos
end

end

Basado en la migración anterior debes tener los siguientes modelos:

app/models/usuario.rb

class Usuario < ActiveRecord::Base
has_many :permisos, :dependent => true
has_many :grupos, :through => :permisos
end

app/models/grupo.rb

class Grupo < ActiveRecord::Base
has_many :permisos, :dependent => true
has_many :usuarios, :through => :permisos
end

app/models/permiso.rb

class Permiso < ActiveRecord::Base
belongs_to :grupo
belongs_to :usuario
end

Espero te sirva.
Saludos

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs