2016-06-27 4 views
0

私はレストラン用の小さなシステムを構築しています。 foodbeverages、およびapparel_items別のモデルに属するすべてのモデルを一覧表示するにはどうすればよいですか?

は、私は現在、効率的なタイプがあるproduct_typeに属しているすべてのモデルを一覧で立ち往生しています。

各製品の種類は、例えば、foodのためにそれらに属している製品の複数の種類が

多くwraps、多くのsalads、多くのsandwiches、などがありました。この点は、製品の種類ごとにボタンを持つことですこのボタンをクリックすると、選択したタイプのIDに応じて、ボタンに属するすべてのモデルがボタンとして一覧表示されます。これらのモデルのいずれかをクリックして、問題のモデルのデータベースレコードを一覧表示できます。

例:食品、飲料は=>クリック食べ物は=>のためのボタンを示しています。ラップ、サラダやサンドイッチを=>私が所属するすべてのモデルを一覧表示することができますどのようにラップ=>すべてリストラップ

class ProductType < ActiveRecord::Base 
    has_many :apparel_items 
    has_many :chapata_items 
    has_many :combos 
    has_many :croissants 
    has_many :fruits 
    has_many :green_challenges 
    has_many :hot_drinks 
    has_many :infusions 
    has_many :juices 
    has_many :molletes 
    has_many :omelettes 
    has_many :salads 
    has_many :sandwiches 
    has_many :shakes 
    has_many :sincronizadas 
    has_many :slices 
    has_many :smooth_drinks 
    has_many :super_drinks 
    has_many :water_drinks 
    has_many :wrap_items 
end 

をクリックしてください私はこれを効率的にプログラムすることができるように別のものに?

それぞれの商品タイプ(食品、飲料、アパレル商品)のモデルを作成し、それらの3つの商品タイプのみを商品タイプモデルに属するようにする方がよいでしょうか?

+0

質問にモデル定義を含める必要があります。 –

+0

モデル定義が追加されました。 –

答えて

1

ActiveRecord::Reflectionを使用して、任意のモデルの関連付けを検査できます。

のでFood.reflect_on_all_associations(:has_many)はあなたのFoodモデルhas_many各食品の種類のいずれかで、ActiveRecord::Reflection::HasManyReflectionオブジェクトの配列を返します。これらの各反映には名前があります。これはhas_manyの関係を宣言するときに設定した名前です。

あなたがそのようにのような製品のリストを構築するためにこれらの反射の名前を使用することができます

:もちろん

food_product_types = Food.reflect_on_all_associations(:has_many).map(&:name) 

# 'food_product_types' equals [:wraps, :salads, :sandwiches, etc...] 
# Now, create buttons for each food product type 

、製品の種類、製品ではありません関連を持っている場合、あなたがそれらをフィルタリングする必要があります。 。

+0

'Food.reflect_on_all_associations(:has_many).map(&:name) 'で簡略化することができます。 – jaydel

+0

@jaydelよろしくお願いします。あなたの簡略化を使用するために私の答えを更新しました。 –

1

あなたのスキーマは確かにいくつかの非正規化の恩恵を受けることができます。製品グループのモデルを分離することを含む、デザインにアプローチする方法はたくさんあります。

さらに重要なことに、さまざまな製品をすべて別々のモデルに入れようとしている理由を考慮する必要があります。それらを使用するワークフローの立場とはまったく異なっていますか?

Productモデルの真の共有セットをそのまま残し、すべての追加属性をAttributeモデルに入れるだけの価値はありますか? product_typeは、Productのフィールドになり、素直でパフォーマンスの良い方法ですばらしいことをたくさんできるようになります。

関連する問題