2

我正在建立一个在线报价数据库。每个报价都可以在一个或多个国家/地区查看,例如,广告商可能有兴趣在美国和加拿大获得报价。

我们涵盖的国家/地区列表大约有 50 个,每个国家/地区都使用 ISO 标准的两个字母首字母缩写词来标识,例如 US、CA、GB、FR、DE 等。

我可以使用 HABTM 表来处理这个问题,但是当我可以简单地在 MySQL 和 Postgres 中使用“SET”列类型时,将长表加入国家/地区似乎效率低下(请参阅此处的“SET TYPE”MySQL 文档)。

我确实尝试添加一个“set”类型的列,如下所示:

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

这不会引发错误,但我的对象中现在缺少“区域”字段。我在谷歌上找不到太多,因为“set”这个词是英语中最常用的词(140 多种不同的用途,字典中有 6 页)。唯一相关的文章是 2006 年的 Rails Wiki,现在是 404-ing。

将不胜感激任何指针,并在此期间实施一个 habtm。

4

1 回答 1

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

我将“区域”字段设置为输入“文本”。此代码使用“::”作为分隔符存储列表。

于 2010-01-12T18:39:29.807 回答