2010-01-12 7 views
2

Je construis une base de données d'offres en ligne. Chaque offre peut être consultée dans un ou plusieurs pays. Par exemple, un annonceur peut être intéressé par des offres aux États-Unis & Canada.Type de colonne 'set' et Rails

La liste des pays que nous couvrons environ 50 longs avec chaque pays identifié à une norme ISO acronyme de deux lettres comme US, CA, GB, FR, DE, etc.

je pouvais gérer cela avec un HABTM table mais il semble inefficace d'avoir une longue table joignant des offres avec des pays où je pourrais simplement utiliser le type de colonne 'SET' dans MySQL & Postgres (voir la documentation de MySQL sur 'SET TYPE' here).

J'ai essayé d'ajouter une colonne de type « set » comme suit:

t.set :regions, :limit => ["GB","FR","DE"] 

Cette erreur ne jette aucune mais le champ « régions » est maintenant absent de mon objet. Je ne trouve pas grand-chose sur Google car le mot 'set' est le mot le plus couramment utilisé dans la langue anglaise (140+ utilisations différentes et 6 pages dans le dictionnaire). Le seul article pertinent était sur Rails Wiki de 2006 qui est maintenant 404-ing.

Apprécierait n'importe quels pointeurs et mettra en application un habtm pendant ce temps.

Répondre

1

Je fini en remplaçant les méthodes d'accès par défaut dans mon modèle comme suit:

def regions=(list) 
    write_attribute(:regions, pack(list)) 
end 

def regions 
    read_attribute(:regions).split("::") 
end 

private 
def pack(var) 
    field = var[0] 
    list = var.dup 
    list.shift 
    list.each do |i| 
    field = [field,i].join("::") 
    end 
    field 
end 

J'ai mis le « texte » «régions du champ à saisir. Ce code stocke la liste avec "::" comme séparateur.

Questions connexes