2010-08-01 3 views
0

Je conçois une application ruby ​​on rails pour une pharmacie, et l'une des caractéristiques est qu'il y a des magasins qui ont des pharmaciens qui y travaillent. En outre, il existe des pharmaciens, qui peuvent travailler dans de nombreux magasins. Cela ressemble à un travail pour HABTM, non? Eh bien, étant le novice que je suis, j'ai conçu manuellement une solution de contournement (parce que je n'ai jamais entendu parler de HABTM - je me suis fondamentalement appris les rails et je n'ai jamais eu de relations plus avancées). À l'heure actuelle, lorsqu'un pharmacien est enregistré, il y a quelques lignes dans l'action de création et de mise à jour du contrôleur des pharmaciens qui transforme les magasins dans lesquels ils travaillent en une chaîne, chaque magasin étant séparé par une virgule. Ensuite, quand un magasin est affiché, il fait une demande MYSQL par @pharmacists = Pharmacist.find :all, :conditions => "stores REGEXP '#{@store.id}'"rails has_and_belongs_to_many ou implémentation manuelle

Déplacerait-il ce système sur un système HABTM basé sur des rails serait-il plus efficace? Bien sûr, cela exigerait moins de code à la fin, mais cela en vaudrait-il la peine? En d'autres termes, quels avantages, autres que le code, en retireraient-ils pour que cette association soit gérée par des chemins de fer?

Répondre

1

L'avantage est que vous utiliserez le bon outil pour le travail! L'intérêt d'utiliser un framework tel que Rails est qu'il vous aide à résoudre des problèmes communs sans avoir à réinventer la roue, ce que vous avez fait ici. En utilisant des associations, vous utiliserez également une base de données relationnelle correctement et pourrez profiter d'avantages tels que l'indexation de clé étrangère, qui sera plus rapide que la manipulation de chaînes.

Vous devez utiliser une relation has_and_belongs_to_many sauf si vous devez stocker des attributs supplémentaires sur le modèle de jointure (par exemple, la date à laquelle un pharmacien a commencé à travailler dans un magasin), auquel cas utilisez has_many :through.

En utilisant des associations Rails vous donnera toutes les méthodes pratiques que Rails DISPOSE comme ceux-ci:

# Find the stores the first pharmacist works at 
@stores = Pharmacist.first.stores 

# Find the pharmacists who work at a store 
@pharmacists = Store.find_by_name('A Store').pharmacists 
+0

Merci! Je l'ai implémenté et c'était tellement facile - il a fallu environ 1/5ème du code que j'ai utilisé auparavant et était significativement plus facile que prévu. Ces méthodes qui viennent avec la relation has_and_belongs_to_many seront très utiles dans les projets futurs, et plus tard dans la réalisation de ce projet. –

Questions connexes