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

时间:2015-02-07 23:52:13

标签: ruby-on-rails crud

我有一个总值,我想保留,但我也希望每次某个用户创建资源时减少它。例如,我有 -

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

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

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

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

2 个答案:

答案 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_valuetotal列的命名有点令人困惑。您可能希望将其更改为current_totalprevious_total,因为这些似乎可以更好地描述您要实现的目标。

答案 1 :(得分:0)

谢谢@ lukad03, 我做了一些搞乱你的答案,并自己想出了另一种方式。我创建了另一个列来模仿第一个列,并使用变量使它在资源模型中等于它自己。 (比如@ lukad03说)

resource.rb

before_create :decrement

def decrement
self.total = self.decrement
end

这有点像黑客但它的工作正常。