Question

Je suis un débutant avec Rails 3 programmation et j'ai un problème avec la création du modèle droit.

Disons qu'il est une application pour gérer la bibliographie d'un livre, qui est de gérer le mappage pour chaque chapitre de la liste des articles référencés. Donc, pour la partie de l'article Je pourrais avoir quelque chose comme:

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

Du côté de la bibliographie, je voudrais avoir un modèle comme

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

ref est en fait un tableau de références à des articles, il serait géré par méthode serialize ActiveRecord.

Ok, donc maintenant la question est de savoir comment faire en sorte que les éléments du tableau @bibliography.ref sont des références dans le sens (Ruby) à plusieurs article_id.

Comment puis-je modéliser une telle relation, et ce que Rails 3 Code dois-je écrire pour exprimer cela? Ce qui me confond est qu'un seul champ d'une instance unique de @bibliography renverrait à un grand nombre @ article.id.

Merci d'avance

Était-ce utile?

La solution

Si vous voulez vraiment des relations de magasin comme ça, alors je définir une méthode dans le modèle Bibliography, quelque chose comme ceci

(en supposant que ref est un tableau de ids)

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

Je stocker la relation différemment cependant. Ajouter un troisième articles_bibliographies table / modèle avec article_id et champs bibliography_id. Ensuite, vous pouvez utiliser le has_many: par l'association qui est intégrée dans ActiveRecord

.

dans votre classe Bibliography alors que vous auriez quelque chose comme:

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

vous pouvez juste faire @ bibliography.articles

En savoir plus ici http://guides.rubyonrails.org/association_basics .html # la has_many-par-association

Autres conseils

Suite à la suggestion de Egze, j'ai trouvé un moyen de résoudre mon problème (sans utiliser les tableaux!). Alors, je crée une relation has_many-through, mais comme je veux sauver l'ordre pour la articles comment ils sont mentionnés dans la bibliographie, la table articles_bibliographies dispose également d'un champ no_commande, où je magasin qui est la première, deuxième, etc. article mentionné dans la bibliographie:

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

De cette façon, je peux récupérer et afficher une liste ordonnée d'éléments avec:

@bibliography.articles.order("order_nr ASC")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top