2010-01-12 54 views
2

我正在構建在線提供的數據庫。每個優惠可以在一個或多個國家進行查看,例如,廣告商可能有興趣在加拿大的美國&中達成優惠。'set'和Rails的列類型

我們覆蓋的國家名單是與ISO標準的兩個字母的縮寫如美國確定每個國家大約50長,CA,英國,法國,德國等

我可以用一個HABTM處理這但如果我可以簡單地使用MySQL & Postgres中的'SET'列類型(請參閱'SET TYPE'here的MySQL文檔'),那麼與國家建立長桌加入報價似乎效率低下。

我曾嘗試加入「設置」如下類型的列:

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

這不引發錯誤領域「區」,現在從我的對象丟失。我無法在Google上找到很多詞語,因爲「set」這個詞是英語中最常用的詞(140多種不同用途和詞典中的6個詞)。唯一相關的文章來自2006年的Rails Wiki,現在已經404版本。

希望任何指針,並會在此期間實施habtm。

回答

1

我結束了覆蓋在我的模型默認的訪問方法如下:

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 

我設置了「區域」字段中鍵入「文本」。此代碼將「::」列表存儲爲分隔符。