2009-06-10 7 views
0

mon sql DB contient des tableaux "emplois" et "job_categories".rails: comment lier les valeurs dans les migrations de données aux variables de classe/modèle?

associe des chaînes de catégorie d'emploi « de job_categories » (à savoir « Développement de logiciel ») avec un nombre entier (par exemple 7).

J'ai besoin de ces associations enregistrées dans des variables dans mon contrôleur d'emploi pour diverses fonctions de requête. Comment puis-je utiliser des rails pour lier dynamiquement les modifications de la table job_categories aux variables de mon contrôleur de travaux? J'ai travaillé avec RoR pendant quelques semaines maintenant mais je suis encore un peu flou sur la façon dont tout interagit. Je vous remercie!

+0

Il ne semble pas que cela ait quelque chose à voir avec les migrations, du moins pas dans le sens de la gestion de schéma de base de données Rails. –

Répondre

3

Il y a une grande chasse aux sorcières avec ce que vous essayez de faire, mais d'abord je vais répondre à votre question posée.

Créez des accesseurs de niveau classe dans votre JobsController, puis écrivez un observateur dans la classe JobCategory qui apporte les modifications appropriées au JobsController après les événements save et destroy.

class JobsController < ActionController::Base 
    @@categories = JobCategory.find(:all) 
    cattr_accessor :categories 

    # ... 
end 

class JobCategoryObserver < ActiveRecord::Observer 
    def after_save(category) 
    JobsController.categories[category.name] = category.id 
    end 

    def after_destroy(category) 
    JobsController.categories.delete(category.name) 
    end 
end 

Vous aurez besoin d'une logique supplémentaire qui supprime l'ancien nom si vous autorisez les changements de nom. Les méthodes dans ActiveRecord::Dirty aideront avec cela.

Ainsi, la chasse aux sorcières. Le problème avec une telle approche est que, généralement, vous avez plus d'un processus de traitement des demandes. Vous pouvez apporter une modification à la table job_categories, mais cette modification uniquement est mise à jour dans un processus. Les autres sont maintenant rassis.

Votre table job_categories est susceptible d'être faible. S'il est accédé avec n'importe quelle fréquence, il sera mis en cache dans la mémoire, soit par le système d'exploitation ou le serveur de base de données. Si vous l'interrogez assez, les résultats de cette requête peuvent même être mis en cache par la base de données. Si vous ne l'interrogez pas très souvent, vous ne devriez pas vous soucier d'essayer de mettre en cache à l'intérieur JobsController de toute façon.

Si vous devez absolument mettre en cache dans la mémoire, il vaut mieux aller avec memcached. Ensuite, vous obtenez un cache unique sur lequel travaillent tous vos processus Rails et aucune donnée périmée.

Questions connexes