2008-12-10 4 views
2

Je m'instruis donc Ruby on Rails, avec un background en PHP. J'ai écrit une application PHP bâclée, une preuve de concept appelée "2NDP." Je veux recréer ceci dans Ruby on Rails (mais plus basique, plus propre, et avec une meilleure interface), donc je peux apprendre Les bases. 2NDP est un site Web où vous pouvez écrire vos propres livres "Choose-Your-Own-Adventure", mais en collaboration avec d'autres personnes. La façon dont j'ai fait ce travail avec PHP/MySQL, c'est que j'avais une table d'histoires et un tableau de pages. Les pages appartiendraient à des histoires (évidemment), mais chaque page aurait des références à jusqu'à quatre autres pages en ayant quatre colonnes distinctes, une pour chaque ID de page possible qui pourrait être référencé.Utilisez des "références" pour plusieurs éléments du même type

Donc maintenant, dans mon application RoR, j'ai des "histoires" qui ont des "pages" qui leur sont associées. J'ai besoin d'un moyen pour que les pages se réfèrent les unes aux autres, mais la possibilité de plus d'une référence par page (une page peut faire référence à quatre autres pages). J'aime beaucoup les références que RoR a, mais est-il possible d'implémenter ce type de système? Gardez à l'esprit que ma seule expérience RoR consiste à suivre quatre tutoriels, et j'essaie de ré-appliquer ce que j'ai appris avec une "application de la vie réelle".

+0

Je pense que c'est la 666e question avec "rails" D: –

Répondre

2

Plutôt que d'avoir quatre colonnes séparées, une table de jonction séparée pourrait être plus appropriée. Par exemple:

Pages -> LinkedPages -> Pages

Ensuite, vous pouvez créer une relation has_many through.

class Pages < ActiveRecord::Base 
    has_many :linked_pages 
    has_many :pages, :through => :linked_pages 
end 

class LinkedPages < ActiveRecord::Base 
    belongs_to :pages, :class_name => "Pages", :foreign_key => "page_id" 
    belongs_to :linked_pages, :class_name => "Pages", :foreign_key => "linked_id" 
end 

Ensuite, lorsque vous utilisez votre objet page, vous pouvez simplement dire:

my_page.pages 
+0

Merci! Je m'habitue toujours à cette mentalité RoR, et cela semble être une très bonne solution logique. –

0

Hates_, cela a été utile, mais si quelqu'un a besoin d'une explication plus approfondie sur ce genre de chose, read about it here.

Questions connexes