Relacion ternaria


#1

Relativamente nuevo en Rails !!!

Como modelarían estas relaciones???

Estoy teniendo problemas para modelar una relación ternaria, la idea es
que en una película un Nombre puede estar en mas de un Rol, como actor y
director por ejemplo, a su vez las relaciones son todas del tipo N-a-N,
el tema es que cada vez que creo una película se crean varias copias de
un registro en la tabla apariciones

Esto es un ejemplo del estado de la tabla luego de crear una película
con dos Nombres

id pelicula_id nombre_id rol_id

21 null 10 2
22 null 10 2
23 6 10 null
24 null 11 3
25 null 11 3
26 6 11 null
27 6 10 null
28 6 11 null

Y estos son los modelos

class Pelicula < ActiveRecord::Base
has_many :apariciones, :dependent => :destroy
has_many :nombres, :through => :apariciones
has_many :roles, :through => :apariciones

accepts_nested_attributes_for :nombres, :reject_if => lambda { |a|
a[:nombre].blank? }, :allow_destroy => true
accepts_nested_attributes_for :roles, :reject_if => lambda { |a|
a[:nombre].blank? }, :allow_destroy => true
end

class Nombre < ActiveRecord::Base
has_many :apariciones, :dependent => :delete_all
has_many :peliculas, :through => :apariciones
has_many :roles, :through => :apariciones

accepts_nested_attributes_for :roles, :reject_if => lambda { |a|
a[:nombre].blank? }, :allow_destroy => true
end

class Rol < ActiveRecord::Base
has_many :apariciones, :dependent => :delete_all
has_many :peliculas, :through => :apariciones
has_many :nombres, :through => :apariciones
end

Muchas gracias
Martín


#2

La causa es un bug en la version 2.3.5 de rails con el uso de
accepts_nested_attributes_for

https://rails.lighthouseapp.com/projects/8994/tickets/3659-accepts_nested_attributes_for-causes-duplicate-entries-in-join-model-table