2010-10-29 7 views
0

Version courte: Où dois-je stocker les ID spécifiques à l'environnement? ENV ['une partie de la variable']? Ailleurs?Rails: paramètres environnementaux dynamiques sans nombres magiques

Version longue:

Disons que j'ai un modèle appelé livres et un livre a une catégorie. (Par souci de cette question, nous allons dire un livre n'a qu'une seule catégorie.)

class Book < ActiveRecord::Base 
    belongs_to :category 
end 

class Category < ActiveRecord::Base 
    has_many :books 
end 

Maintenant, disons une catégorie est appelée « Erotica ». Et je veux supprimer les livres d'érotisme dans mon type à venir. Cela semble simple. Mais en production et en développement, l'érotisme a un ID différent. Je ne veux pas que mon code soit dépendant de l'identifiant. Je ne veux pas que cela dépende de la chaîne (dans le cas où 'erotica' est renommé pr0n ou autre).

Je pense que je devrais avoir quelque chose comme

def suppress_method 
    suppress_category_id = look_up_suppression_id 
    ... 
end 

mais où devrait « chercher » regarder?

Merci!

Répondre

0

Prendre cette approche sera fragile, et si vous voulez supprimer plusieurs catégories? Erotica et Politique? La meilleure conception ici est pour vous d'ajouter réellement 'supprimé' comme une catégorie booléenne à une migration, et de le maintenir dans l'interface d'administration de votre application. Une fois que vous avez fait cela, vous pouvez ajouter un champ nommé comme:

class Category < ActiveRecord::Base 
    named_scope :not_suppressed, :conditions=>{:suppressed=>false} 
    # or for rails 3 
    scope :not_suppressed, where(:suppressed=>false) 
end 

Ensuite, il suffit de mettre à jour votre type de code avant de le faire:

Category.not_suppressed.find ... 

Plutôt que

Category.find 
+0

Je suis d'accord qui serait nettoyeur. Cependant, je suis vraiment plus intéressé par où une valeur spécifique à l'environnement comme ça devrait être stockée. Et quelle est la meilleure façon de stocker/récupérer? – earnold

+0

Voilà à quoi servent les fichiers config/environments/foo.rb – NZKoz

Questions connexes