は、あなたが簡単にあなたの目標を達成することができ、データベースのバックエンドとして9.2+のPostgresを使用するように、document oriented databases/NOSQL systemsを見てみてください。
hstore extensionを有効にします(これもSQL経由で行うことができます)。
class AddExtrasToItems < ActiveRecord::Migration
def change
enable_extension "hstore"
add_column :items, :extras, :hstore
# I also advice to use gin for indexing
# add_index :users, :extras, using: :gin
end
end
Might be helpful - GIN and GIST
、そして、あなたがレコードを作成できるようになりますstore_accessor
(http://api.rubyonrails.org/classes/ActiveRecord/Store.html)
class Item < ActiveRecord::Base
store_accessor :extras
...
end
でこのプロパティ(extras
)を識別し、そのような
i1 = Item.new
i1.name = 'foo'
i1.type = 'salad'
i1.extras = { size: 'big', vegan: 'yes' }
i1.save
i2 = Item.new
i2.name = 'bar'
i2.type = 'snack'
i2.extras = { flavor: 'mexicana', kosher: 'yes' }
i2.save
クエリ
# Items having flavor
Item.where("extras ? :key", key: "flavor")
# Items classified as kosher
Item.where("extras @> hstore(:key, :value)",
key: "kosher", value: "yes"
)
BTW postgresには、データベース内にドキュメントを格納するためのjsonおよびjsonbの列型もあります。彼らも役に立つかもしれません - https://www.postgresql.org/docs/9.6/static/datatype-json.html
ありがとうございました! – amrrbakry