减少视图中的值但不减少数据库中的值
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_value
和 total
列的命名有点混乱。您可能希望将它们更改为 current_total
和 previous_total
,因为它们似乎能更好地描述您要实现的目标。
谢谢@lukad03,
我对你的回答做了一些改动,然后自己想出了另一种方法。我创建了另一列来模仿第一列,并使用变量使其在资源模型中等于自身。 (就像@lukad03 说的)
resource.rb
before_create :decrement
def decrement
self.total = self.decrement
end
有点乱,但效果很好。
我有一个我想保留的总价值,但我也想在每次某种类型的用户创建资源时减少它。例如我有-
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_value
和 total
列的命名有点混乱。您可能希望将它们更改为 current_total
和 previous_total
,因为它们似乎能更好地描述您要实现的目标。
谢谢@lukad03, 我对你的回答做了一些改动,然后自己想出了另一种方法。我创建了另一列来模仿第一列,并使用变量使其在资源模型中等于自身。 (就像@lukad03 说的)
resource.rb
before_create :decrement
def decrement
self.total = self.decrement
end
有点乱,但效果很好。