我正在建立一个在线优惠数据库。每个优惠都可以在一个或多个国家/地区查看,例如广告客户可能有兴趣在美国和美国推出优惠。加拿大。
我们所覆盖的国家/地区列表长度约为50个,每个国家/地区都标有ISO标准两个字母的首字母缩写词,如美国,加拿大,英国,法国,德国等。
我可以使用HABTM表来处理这个问题,但是如果我可以简单地使用MySQL中的“SET”列类型,那么将长表连接到各个国家/地区似乎效率低下。 Postgres(参见关于'SET TYPE'here的MySQL文档)。
我确实尝试添加“set”类型的列,如下所示:
t.set :regions, :limit => ["GB","FR","DE"]
这不会引发错误但是现在我的对象中缺少字段'regions'。我在Google上找不到太多,因为“set”这个词是英语中最常用的词汇(140多个不同的用法和6个字典)。唯一相关的文章是关于2006年的Rails Wiki,现在是404-ing。
会欣赏任何指示,并在此期间实施habtm。
答案 0 :(得分: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
我将'regions'字段设置为'text'。此代码将“::”作为分隔符存储在列表中。