我正在设计一个双边市场,业主可以以一定的价格将他们的资产出租给租房者。
让我们举个例子来asset.rb
daily_rate :decimal
hourly_rate :decimal
假设如果租房者想租用资产,他/她将提交请求。承租人应该支付他/她在提出请求时看到的价格是合理的。我希望能够锁定价格信息,即使业主在预订期间更改价格也是如此。我们可以在发出请求时获取该定价的快照。
我有几个想法:
1) 将所有价格字段存储在请求模型中
这是在请求模型中存储所有价格快照的最简单方法。这就是我们现在正在使用的。
2) [没有尝试过]使用像写字记录这样的宝石
有一些库和 Gem 可用于存储price
模型的历史更改。我读到了乐观锁定模型以进行版本控制的信息。但我不知道使用它来存储定价信息是否也是常见的做法。
我会通过为资产和租房者实际想要租用东西时创建的Order
单独模型来处理这个问题。基本上,您的订单至少具有与您的资产相同的两个属性(即daily_rate
和hourly_rate
)以及您可以称之为status
的第三个属性。
当潜在租客选择他们想要的资产时,你的应用将创建一个order
实例,其中包含当前daily_rate和资产hourly_rate以及状态"unconfirmed"
(字符串或枚举)。然后,您应该向承租人展示包含这些费率的确认页面,并询问他们是否仍想继续租赁。如果他们说是,您可以将status
设置为"confirmed"
.
这种结构将防止租用资产的用户在承租人下订单后能够更改价格。即使租用资产的用户在承租人的初始请求和确认之间更改了价格,承租人也可以选择以他们提出初始请求时可用的价格完成订单。