2010-08-04 6 views
1

J'ai une table appelée language qui a une colonne appelée comme lang_code. Il a les valeurs suivantes.Comment appliquer ce filtre dans Rails

id lang_code created_at   updated_at 
1 ARA  2010-07-29 15:27:25 NULL 
2 CHI  2010-07-29 15:27:25 NULL 
3 DAN  2010-07-29 15:27:25 NULL 
4 DEU  2010-07-29 15:27:25 NULL 
5 ESP  2010-07-29 15:27:25 NULL 
6 KOR  2010-07-29 15:27:25 NULL 
7 VIE  2010-07-29 15:27:25 NULL 

J'ai besoin de supprimer 3 langues (CHI, DAN ad VIE) de cette table. Je peux simplement écrire une migration et supprimer définitivement les valeurs de la table. Mais je ne veux pas faire ça. Au lieu de cela, je veux les filtrer au niveau du modèle afin que toute opération que je fais sur ce modèle particulier ne devrait pas avoir ces trois langues dedans. Comment faire cela dans Rails?

Merci

Répondre

3

Utilisez default_scope:

class Language < ActiveRecord::Base 
    UNWANTED_LANGUAGES = ["CHI", "DAN", "VIE"] 
    default_scope :conditions => ["lang_code not in (?)", UNWANTED_LANGUAGES] 
    ... 
end 
+0

SWEEEEEEEEEEEEET !! Merci!!! – bragboy

0
  1. Vous créez une migration où vous ajoutez une: colonne active. Vous définissez une valeur par défaut (EG par défaut est actif)

  2. Dans la même migration (attention à appeler Language.reset_column_information) ou dans une autre migration, vous prenez en charge toutes les relations de DB avec (CHI, DAN, VIE) impliquées. Ensuite, vous les inactivent (inactif = true)

  3. Dans la classe de langue, vous utilisez un default_scope:

    default_scope: conditions => {: actif => true}

+0

De cette façon, vous pouvez activer/désactiver les langues depuis une interface d'administration. –

Questions connexes