2010-01-12 55 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 

我设置了“区域”字段中键入“文本”。此代码将“::”列表存储为分隔符。