首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每次在rails 6中重新加载页面时,罚款都会增加。

每次在rails 6中重新加载页面时,罚款都会增加。
EN

Stack Overflow用户
提问于 2022-08-02 11:31:04
回答 1查看 35关注 0票数 0

我想添加fine函数,即用户在请求图书时选择返回日期,如果日期超过返回日期,则用户将被罚款。但问题是每次我重新加载页面时,这里的控制器代码都会自动增加:

代码语言:javascript
复制
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

结束

EN

回答 1

Stack Overflow用户

发布于 2022-08-02 11:38:25

您的代码正在执行您所要求的操作。每次您进入索引页时,它都会运行该代码,每次更新fine

这一行将不断添加到前面的fine值:

代码语言:javascript
复制
ownership.update(fine: ownership.fine + (total_days * 100))

所以每次刷新时都要将total_days * 100添加到已经存在的fine中。

也许您需要添加检查,例如,如果已经添加了罚款,请不要更新它:

代码语言:javascript
复制
if Time.now >= ownership.return_date && ownership.fine.zero?
  today = Time.now
  ...

不过,我不会将这种逻辑存储在控制器中。它可能属于模型,也可能属于从控制器调用的服务类。

只是附带说明一下,这段代码是不必要的:

代码语言:javascript
复制
@ownerships = current_user.ownerships
Ownership.all.each do |ownership|
  ownership = Ownership.find(ownership.id)

您正在获取当前_user的所有ownerships,然后一个接一个地再取它们。代码相当于

代码语言:javascript
复制
  @ownerships = current_user.ownerships
  @ownerships.each do |ownership|

希望这有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73206815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档