¿Cómo puedo lograr lo siguiente? Tengo dos modelos (blogs y lectores) y una tabla de unión que me permite tener una relación N: M entre ellos:cómo evitar duplicados en una relación has_many: through?
class Blog < ActiveRecord::Base
has_many :blogs_readers, :dependent => :destroy
has_many :readers, :through => :blogs_readers
end
class Reader < ActiveRecord::Base
has_many :blogs_readers, :dependent => :destroy
has_many :blogs, :through => :blogs_readers
end
class BlogsReaders < ActiveRecord::Base
belongs_to :blog
belongs_to :reader
end
Lo que quiero hacer ahora, es añadir a los lectores a diferentes blogs. La condición, sin embargo, es que solo puedo agregar un lector a un blog UNA VEZ. Por lo tanto, no debe haber ningún duplicado (el mismo readerID
, el mismo blogID
) en la tabla BlogsReaders
. ¿Cómo puedo conseguir esto?
La segunda pregunta es, ¿cómo obtengo una lista de blog a la que los lectores no están suscritos (por ejemplo, para completar una lista desplegable, que luego puede usarse para agregar el lector a otro blog) ?
Además, quería mencionar que este es probablemente el mejor método, ya que la respuesta aceptada selecciona TODOS los datos de las filas (por ejemplo, the_reader.blogs) mientras que mi respuesta selecciona solo los ID de las filas (por ejemplo, the_reader. blog_ids). ¡Este es un gran golpe de rendimiento! –
esta es una solución mejor y debería ser la respuesta correcta. Gracias Josh. –
thx Josh! ¡Parece más delgado de hecho! – Sebastian