0

私は人の観点から店へのステップをモデル化しようとしていますが、モデルの設計と「この製品/サービスを購入した」部分を実際に実装する方法について助けが必要です。

これまでのところ、モデルの設計は次のようになると思います。

Person
  has_many :purchases

Purchase
  belongs_to :person
  belongs_to :product

Products
  belongs_to :store
  has_many :purchases

個人は、好きなだけ多くの製品を購入できます。

「この商品を購入した」機能をチェックボックスにして、商品に を割り当てたいPurchaseのですが、どうすればよいですか? モデルの設計は正しいですか?

4

2 に答える 2

1

を使用すると、これを少し簡単にすることができthroughます。実際にモデルとして購入する必要がない場合は、HABTM(Person has_and_belongs_to_manyProducts)を実行するだけで済みます。

Person
  has_many :purchases
  has_many :products, :through => :purchases

Purchase
  belongs_to :person
  belongs_to :product

Product
  has_many :purchases
  has_many :buyers, :through => :purchases, :class => 'Person'

人が製品を購入するとき、これを記録できます。

@person.products << Product.find(100)

関連する購入は自動的に作成され、保存されます。購入時の製品の価格などの追加情報を記録する場合before_saveは、購入モデルでこれらの値を設定するコールバックを作成できます。

class Purchase < ActiveRecord::Base
  # ...
  before_save :record_price

  def record_price
    self.price = product.price
  end
end
于 2012-08-07T13:17:25.473 に答える
1

モデルはこれに近いはずだと思います。

Service:  
belongs_to :store  
has_many :products  

Products:  
belongs_to :store  
has_many : purchases

この背後にある理由は、それが現実の世界で有形の善でServiceあるProductかどうかは重要ではないということです (私は思います)。たとえば、整備士はService自動車修理を提供し、最後Productは修理された車両です。

アップデート

本質的に起こるPerson必要があるのは、Collectionor List(ルビーのデータ型はわかりませんが、標準のデータ構造です) が必要なだけですProduct。UI に表示される場合は、その中ですべてを単純に反復処理するだけProductsPerson、それらが所有するすべてのものになります。ここで、所有者が総在庫と交差するすべてを意味する場合、これPersonは少し異なる質問です。アプローチは同じですが、製品の 2 つのリスト (個人が所有するものと総在庫の 1 つ) の交点を取るだけで、個人が所有するすべてのものを取得できます。

于 2012-08-07T12:35:01.780 に答える