我想添加fine函数,即用户在请求图书时选择返回日期,如果日期超过返回日期,则用户将被罚款。但问题是每次我重新加载页面时,这里的控制器代码都会自动增加:
def index
@ownerships = current_user.ownerships
@ownerships.each do |ownership|
ownership = Ownership.find(ownership.id)
if Time.now >= ownership.return_date
ownership.update(fine: ownership.fine + 100))
else
ownership.update(fine: 0)
end
end结束
发布于 2022-08-02 11:38:25
您的代码正在执行您所要求的操作。每次您进入索引页时,它都会运行该代码,每次更新fine。
这一行将不断添加到前面的fine值:
ownership.update(fine: ownership.fine + (total_days * 100))所以每次刷新时都要将total_days * 100添加到已经存在的fine中。
也许您需要添加检查,例如,如果已经添加了罚款,请不要更新它:
if Time.now >= ownership.return_date && ownership.fine.zero?
today = Time.now
...不过,我不会将这种逻辑存储在控制器中。它可能属于模型,也可能属于从控制器调用的服务类。
只是附带说明一下,这段代码是不必要的:
@ownerships = current_user.ownerships
Ownership.all.each do |ownership|
ownership = Ownership.find(ownership.id)您正在获取当前_user的所有ownerships,然后一个接一个地再取它们。代码相当于
@ownerships = current_user.ownerships
@ownerships.each do |ownership|希望这有用。
https://stackoverflow.com/questions/73206815
复制相似问题