Pregunta

Soy un principiante con la programación Rails 3 y tengo un problema con la creación del modelo correcto.

Digamos que hay una aplicación para administrar la bibliografía de un libro, es decir, administrar el mapeo para cada capítulo de la lista de artículos referenciados. Entonces, para la parte del artículo, podría tener algo como:

create_table :articles do |t|
  t.string :title
  t.text   :content
  ...

En el lado de la bibliografía me gustaría tener un modelo como

create_table :bibliographies do |t|
  t.string :chapter
  t.text   :ref
  ...

dónde ref en realidad es una variedad de referencias a artículos, por lo que se gestionaría a través de serialize Método Activerecord.

Ok, ahora el problema es sobre cómo hacer para que los elementos de la matriz @bibliography.ref son referencias (en sentido rubí) a varios article_id.

¿Cómo modelo tal relación y qué código Rails 3 debo escribir para expresar eso? Lo que me confunde es que un solo campo de una sola instancia de @Bibliography haría referencia a muchos @artículo.id.

Gracias por adelantado

¿Fue útil?

Solución

Si realmente quieres almacenar relaciones como esa, definiría un método en el modelo de bibliografía, algo como esto

(Suponiendo que la referencia es una variedad de IDS)

def articles
  Article.where(:id => self.ref)
end

Sin embargo, almacenaría la relación de manera diferente. Agregue una tercera tabla/modelo Artículos_Bibliografías con los campos Artículo_ID y Bibliografía_ID. Luego puede usar el Has_Many: a través de la asociación que está integrado en Activerecord.

En tu clase de bibliografía, entonces tendrías algo como:

has_many :articles_bibliographies
has_many :articles, :through => :articles_bibliographies

Entonces puedes hacer @bibliography.articles

Leer más aquí http://guides.rubyonrails.org/association_basics.html#the-has_many-through-sociation

Otros consejos

Después de la sugerencia de Egze, encontré una manera de resolver mi problema (¡sin usar matrices!). Entonces, creo una relación Has_Many-through, pero como quiero guardar el orden para los artículos cómo se mencionan en la bibliografía, la tabla artículos_bibliografías también tiene un campo orden_nr, donde guardo que es el primero, segundo, etc. Artículo mencionado en la bibliografía:

create_table :articles_bibliographies do |t|
   t.references  :article
   t.references  :bibliography
   t.integer     :order_nr

De esta manera puedo recuperar y mostrar una lista ordenada de elementos con:

@bibliography.articles.order("order_nr ASC")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top