减少视图中的值但不减少数据库中的值

decrement a value in view but not database

我有一个我想保留的总价值,但我也想在每次某种类型的用户创建资源时减少它。例如我有-

if @user == "Premium"
        @resource.decrement!(:total)
end

但我还想展示我拥有的第一个 :total 。所以换句话说,我希望原始值和递减值显示在视图页面上。像这样-

<%= resource.total %>
<%= resource.decremented_value %>

我怎么能那样做?我需要在我的数据库中创建另一个列吗?

我建议创建一个单独的列,然后在您的模型中使用新方法来减少该值。例如:

in models/resource.rb

before_create :decrement

def decrement
  self.decremented_value = self.total - 1
end

这只会在您第一次创建Resource时调用decrement方法。但是,如果您编辑现有资源的总数,它不会减少总数,因为它只监听创建操作。我建议查看此答案以了解更多关于收听模型更新的信息:

最后一件事:deceremented_valuetotal 列的命名有点混乱。您可能希望将它们更改为 current_totalprevious_total,因为它们似乎能更好地描述您要实现的目标。

谢谢@lukad03, 我对你的回答做了一些改动,然后自己想出了另一种方法。我创建了另一列来模仿第一列,并使用变量使其在资源模型中等于自身。 (就像@lukad03 说的)

resource.rb

before_create :decrement

def decrement
self.total = self.decrement
end

有点乱,但效果很好。