1

プロジェクト固有の質問があります。アプリでモデルを設定する最も効率的で論理的な方法を決定しようとしています。ここでモデル化する関連プレーヤーは、ベンダー、ベンダー インベントリ、および製品です。以下は、何らかの方法で各アイテムが何を返すことができるかの内訳です。

在庫: ストア ID 製品と関連する詳細 (価格、名前、ブランド、詳細、製品コード)

ベンダー: 店舗 ID、場所、名前

製品: 価格、名前、ブランド、詳細、製品コード

明らかに、このスキームには製品と在庫の間で多くの重複があります。私の問題は、ベンダーが在庫に同様のアイテムを持っている可能性がありますが、価格は常に異なるということです. したがって、単純にモデルを製品コードで関連付けることはできません。ほとんどのベンダーは同じ製品を扱っているため、店舗の在庫をすべての製品情報でモデル化すると、多くの重複が発生するのではないでしょうか? また、ベンダー用に別のモデルを用意する必要がなく、すべての在庫を保持しようとすることもできますが、迷っています。助けてください?!前もって感謝します。

編集:

これが私のモデル構造ですが、理想的かどうかはわかりません。

class Vendor < ActiveRecord::Base

    attr_accessible :name, :address

    has_one     :inventory
    has_many    :products, through: :inventories
end

class Inventory < ActiveRecord::Base

    has_many    :products
    belongs_to  :vendor
end

class Product < ActiveRecord::Base

    attr_accessible :upc, :brand, :product, :details, :price

    has_many    :inventories
    has_many    :vendors, through: :inventories

end
4

1 に答える 1

1

特にモデルのセットが単なる例である場合は特に、特定のニーズを理解しているかどうかはわかりませんが、名前から判断すると、ここに私の実装があります。

ベンダーは主要なエンティティであり、結合テーブルの在庫を通じて多くの製品を所有します。

class Vendor < ActiveRecord::Base

    attr_accessible :name, :address

    has_many     :inventories
    has_many    :products, through: :inventories
end

ただし、ベンダー間で異なる必要がある製品の側面があります。この場合、価格と数量 (私が作成したばかりです) は、製品とベンダーごとに独立して作成されるため、結合テーブルに格納できます。関係は、価格や数量などの情報を保存するのに理想的です。

class Inventory < ActiveRecord::Base

    attr_accessible :product_id, :vendor_id, :price, :quantity

    belongs_to  :product
    belongs_to  :vendor
end

製品は、ベンダーがそれをどのように処理するかに関係なく、普遍的な属性のみを持つ必要があります。同様に、製品がどこで変更される場合でも、すべてのベンダーで問題ないはずです。

class Product < ActiveRecord::Base

    attr_accessible :upc, :brand, :product, :details

    has_many    :inventories
    has_many    :vendors, through: :inventories

end

これを行うと、ビューでこれを編集し、在庫に価格と数量を設定するのが難しい場合があります。繰り返しになりますが、ネストされたフィールドを使用し、製品ではなく結合テーブルと直接対話する方法があります。simple_form gem を使用した簡単な部分コードを次に示します。

あなたのフォームで、

  <%= f.simple_fields_for :inventories do |inventory_fields| %>
      <%= render partial: "inventory_fields", locals: {f: inventory_fields }%>
  <% end %>
  <%= link_to_add_fields "Add", f, :f %>

そして inventory_fields.html.erb で

  <%= link_to "Remove", '#', class: "remove_fields btn btn-danger" %>
  <%= f.input :product_id, collection: Product.all.somethingsomething, include_blank: false %>
  <%= f.input :price %>
  <%= f.input :quantity %>

ドロップダウンから製品を選択し、価格と数量を設定し、必要なものを動的に設定できるようになりました。

于 2013-07-03T08:09:41.267 に答える