2009-05-29 6 views
1

Je développe un site web dans Ruby on Rails, MySQL et Javascript.Reconstruction Site Web modulaire basé sur l'utilisateur

Le site Web est modulaire, ce qui signifie qu'un utilisateur peut personnaliser sa page d'accueil et faire glisser et déposer un module vers une autre zone où il vivra. il y a trois colonnes où le module peut être abandonné. (Pensez iGoogle ou Netvibes)

Quelle est la meilleure façon de stocker ces données, de sorte que lorsque l'utilisateur retourne leur page d'accueil peut être reconstruit rapidement?

J'ai envisagé de le faire d'une manière où chaque module obtient un ID qui correspond à l'utilisateur, c'est une rangée et c'est positiong dans cette rangée. (Donc, quelque chose comme ... utilisateur | colonne | ligne, serait égal à 1204 | 3 | 27, ce qui signifie que pour l'utilisateur # 1204, ce module serait dans la colonne # 3 et 27 espaces du haut

Ensuite, lorsque l'utilisateur revient , juste en boucle, en ajoutant 1 à chacun jusqu'à ce qu'il atteigne la fin de la colonne et recommencez à l'autre jusqu'à ce que toutes les 3 colonnes sont peuplées

Je pense que ce serait très lent, et il doit y avoir un une meilleure façon de le faire.

Toute suggestion? la plupart du temps à la recherche de la structure de base de données, mais si vous avez un code Rails qui corrilate à ce que je ne me dérangerait pas git seein.

Répondre

1

Je pense que le mieux est de garder vos données dans un seul champ de texte

Par exemple 1204 | 3 | 27 devrait être dans un champ de texte ... avec un bon index par identifiant d'utilisateur, vous devriez obtenir la configuration très très vite. Après cela, vous avez juste besoin d '"exploser" votre configuration pour "|" .

Cordialement

0

Je dis modèle très franchement:

class ModuleInstallation < AR::Base 
    belongs_to :user 
    belongs_to :module 
    validates_presence_of :column 
    validates_presence_of :row 
end 

class User < AR::Base 
    has_many :module_installations, :order => :column 
    has_many :modules, :through => :module_installations 
end 

Ensuite, laissez votre contrôleur gérer plus le tri, quelque chose comme ça (non testé, mais regardez à travers et la documentation des méthodes I » m à l'aide pour obtenir les concepts):

@columns = current_user.module_installations.group_by(&:column) 
@columns.each { |column, modules| modules.sort! { |x,y| x.row <=> y.row } } 

Ensuite, votre point de vue est relativement simple:

<% @columns.each do |column, modules| %> 
    <div class="column-<%= column %>"> 
    <% modules.each do |module| %> 
     <div class="module"> 
     <%= module.to_html %> 
     </div> 
    <% end %> 
    </div> 
<% end %> 
Questions connexes