3

私のRails3アプリでは、とを使用ActiveRecordしてPostgresqlいます。

パーツというモデルがあるとします。モデルには、価格、数量などの標準属性の小さなリストがあります。

ただし、顧客Aは追加したい場合があり、顧客Bは追加LotNumberしたい場合がありOriginalLocationます。

どうすれば彼らにそれをさせることができますか?

タイプを持つことができるPartsDetailモデルを作成することを考えました。

class PartsDetail < ActiveRecord::Base
    attr_accessible :type, :value, :part_id
    belongs_to :parts
end

そのため、「タイプ」は「LotNumber」などになります。

しかし、それが私の関連付けやクエリでどのように機能するかはよくわかりません。

何か案は?

ありがとう。

4

2 に答える 2

3

PostgreSQLを使用しているhstoreため、データベースの列に任意のハッシュを格納するために使用できます。

このモジュールは、単一のPostgreSQL値内にキーと値のペアのセットを格納するためのhstoreデータ型を実装します。これは、めったに調べられない多くの属性を持つ行や半構造化データなど、さまざまなシナリオで役立ちます。キーと値は単なるテキスト文字列です。

hstoreActiveRecordにサポートを追加するための宝石もあります:

https://github.com/softa/activerecord-postgres-hstore

次にhstore、と呼ばれる列を作成し、そのclient_specific中を次のように確認できます。

M.where("client_specific -> 'likes' = 'pancakes'")
M.where("client_specific @> 'likes=>pancakes'")

どのクライアントがパンケーキが好きだと言っているかを確認します。

顧客固有のフィールドのリストを顧客レコードのどこかに保存して、UI側の処理を容易にすることができますが、これは非常に簡単です。

于 2012-05-09T19:11:39.897 に答える
1

モデルでhstore属性をよりシームレスに使用できるようにするために誰かが書いた要点は次のとおりです: https ://gist.github.com/2834785

使用するには、これをイニシャライザーに追加します(またはactive_record_extensions.rbという新しいイニシャライザーを作成します)

require "hstore_accessor"

次に、モデルで次のことができます。

Class User < ActiveRecord::Base
  hstore_accessor :properties, :first_name, :last_name
end

それはあなたがすることを可能にします:

u = User.new
u.first_name = 'frank'

ただし、hstore列に属性を追加し、hstore_attributesをバイパスすることはできます。

u.properties['middle_name'] = 'danger'
于 2012-11-05T21:56:24.443 に答える