我有一个总值,我想保留,但我也希望每次某个用户创建资源时减少它。例如,我有 -
if @user == "Premium"
@resource.decrement!(:total)
end
但我还想展示第一个:我的总数。所以换句话说,我希望在视图页面上显示原始值和减少的值。像这样 -
<%= resource.total %>
<%= resource.decremented_value %>
我怎么能这样做?我需要在数据库中创建另一列吗?
答案 0 :(得分:1)
我建议创建一个单独的列,然后在模型中使用新方法来减小值。例如:
in models/resource.rb
before_create :decrement
def decrement
self.decremented_value = self.total - 1
end
这只会在您第一次创建资源时调用减量方法。但是,如果编辑现有资源的总数,则不会减少总数,因为它只会监听创建操作。我建议查看这个答案,了解更多关于在模型中收听更新的信息:https://stackoverflow.com/a/1586641/810794
最后一件事:deceremented_value
和total
列的命名有点令人困惑。您可能希望将其更改为current_total
和previous_total
,因为这些似乎可以更好地描述您要实现的目标。
答案 1 :(得分:0)
谢谢@ lukad03, 我做了一些搞乱你的答案,并自己想出了另一种方式。我创建了另一个列来模仿第一个列,并使用变量使它在资源模型中等于它自己。 (比如@ lukad03说)
resource.rb
before_create :decrement
def decrement
self.total = self.decrement
end
这有点像黑客但它的工作正常。