0

ライブイベントグッズ販売のアプリを作成しています。私は inventory_events のテーブルを持っています。各 inventory_event は、経時的な在庫の変化を表しています。私のアプリケーションの性質上、1 つのマスター在庫 (在庫のあるすべてのアイテム) とイベントごとに 1 つの在庫を追跡する必要があります。

基本的に、これは私のフローがどのように見えるかです:

  • 今日がイベント日だとしたら
  • イベントで販売されているinventory_itemごとに新しいinventory_eventsが作成されます
  • これらの inventory_events は「チェックイン」と呼ばれ、アイテムをイベントにチェックインしています
  • これにより、負の inventory_event が作成され、これらのアイテムはその後、マスター在庫から削除されます
  • イベントが完了した後、残りの在庫はイベントから「チェックアウト」されます
  • これにより正の inventory_event が作成され、残りのアイテムが在庫に追加されます
  • これら 2 つのトランザクションの正味の qty_change は、このイベントで販売された私の正味のアイテムになります。

現在、これは私がセットアップした方法です:

  • 各イベント has_many :inventory_events
  • inventory_events を作成するとき、イベント更新フォームの fields_for を介してこれを更新しています
  • これは、アイテムのチェックインには問題なく機能します

私の問題は、アイテムをチェックアウトすることから始まります(イベントからではなく、システムに入る)

  • セットアップは上記と同じですが、この特定の日のイベントに関連付けられたチェックアウト イベントごとに 1 つの inventory_event を構築できる必要があります。

私の質問は次のとおりです。以前にこの日のイベントに関連付けられていた inventory_event ごとに 1 つの新しい field_for inventory イベントを作成するにはどうすればよいですか? イベントの数を数えて、それぞれに 1 つ作成できることはわかっていますが、それを行うにはどうすればよいでしょうか。また、いくつかの情報 (item_id) を維持することもできるので、チェックした項目ごとにチェックイン イベントを作成していることを知ることができます。この日アウト?

どうもありがとう。

4

1 に答える 1

1

既知のデータを使用してフォームの作成を開始できます。あなたが持っているとしましょう

class Event
  has_many :check_ins # STI subclass of InnventoryEvent
  has_many :check_outs # same
end

次に、チェックアウトのリストを事前設定できます。各チェックアウトは、同じイベントに対して既に登録されている check_ins の 1 つに対応します。最終的には、以前にチェックインされていないものをチェックアウトすることはありません...

class EventCheckOutController

  def new

    @event = Event.find(params[:event_id])
    @event.check_ins.each do |ci|
      @event.check_outs.build(:item_id => ci.item_id, :amount => ci.amount)
    end

    # render....
  end
end

したがって、オブジェクトにはすべてのチェックアウトが含まれ、最初にチェックアウトした金額と同じ金額が事前設定されます。後でフォームから変更できます。

于 2012-10-02T22:58:39.580 に答える