0

我正在为现场活动商品销售创建应用程序。我有一个inventory_events 表,每个inventory_event 代表库存随时间的变化。由于我的应用程序的性质,我需要跟踪 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 之一。最后你不会检查以前没有检查过的东西......

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 回答