2

オンラインオファーのデータベースを構築しています。各オファーは 1 つ以上の国で表示できます。たとえば、広告主は米国とカナダでオファーに到達することに関心がある場合があります。

私たちがカバーしている国のリストは約 50 の長さで、各国は US、CA、GB、FR、DE などの ISO 標準の 2 文字の頭字語で識別されます。

これは HABTM テーブルで処理できますが、MySQL と Postgres で「SET」列タイプを単純に使用できる場合、国とオファーを結合する長いテーブルを持つのは効率が悪いようです (ここで「SET TYPE」に関する MySQL のドキュメントを参照してください)。

次のように「セット」タイプの列を追加してみました:

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

これはエラーをスローしません、フィールド 'regions' がオブジェクトから欠落しています。「set」という単語は英語で最もよく再利用される単語であるため、Google ではあまり見つけることができません (140 以上の異なる用途と辞書の 6 ページ)。唯一の関連記事は、現在 404-ing である 2006 年の Rails Wiki に関するものでした。

ポインタをいただければ幸いです。その間に 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 に答える