【问题标题】:Column type of 'set' and Rails'set' 和 Rails 的列类型
【发布时间】:2010-01-12 18:14:59
【问题描述】:

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

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

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

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

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

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

不胜感激,同时将实施一个 habtm。

【问题讨论】:

    标签: mysql ruby-on-rails ruby-on-rails-plugins ddl


    【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 2019-11-13
      • 1970-01-01
      • 2012-09-14
      • 2018-11-09
      • 2011-03-16
      • 1970-01-01
      相关资源
      最近更新 更多