2017-04-16 21 views
0

私は、オンライン注文を容易にするレストラン向けの簡単な電子商取引プラットフォームをRailsに構築しています。私がしたいのは、restaurantがそれぞれitemsの1つを個別にカスタマイズできるようにすることです。例えば、前記レストランは、異なるサイズに対して追加料金を付加してitemsizeを追加したい場合があり、flavorを別のitemまたは任意の属性に追加することができます。また、異なる項目が必ずしも同じ属性を持つとは限りません。だから、基本的には、アイテムを作成するときにレストランがカスタムフィールドを追加するようにしたい。電子商取引プラットフォームのアイテムのカスタマイズ

これを達成するための最良の方法は何ですか?

ありがとうございました。

答えて

0

は、あなたが簡単にあなたの目標を達成することができ、データベースのバックエンドとして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_accessorhttp://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

+0

ありがとうございました! – amrrbakry

関連する問題