【发布时间】:2016-01-09 01:42:09
【问题描述】:
我正在尝试为一个相当简单的类编写获取增量/减量方法,但我遇到了一个奇怪的问题。如果我调用 give_point(),点数会增加到 1,然后一遍又一遍地调用它没有任何反应。然后,如果我全部给定_dm(),点将被重置为 0,dms 被设置为 1...我无法让它继续增加,它们会在我的数据库中不断地相互重置。谁能指出我正确的方向?我不知道出了什么问题,我已经盯着这个看了很长一段时间了。感谢您提前提供任何帮助!
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :group
validates :content, :presence => true
after_initialize :init
def init
self.points = 0
self.dms = 0
end
def give_point()
self.points += 1
update(points: self.points)
end
def take_point()
self.point -= 1
update(points: self.points)
end
def give_dm()
self.dms += 1
update(dms: self.dms)
end
def take_dm()
self.dms -= 1
update(dms: self.dms)
end
end
【问题讨论】:
-
你在做
after_initialize :init......你是finding 调用give和take之间的记录吗?如果您在User模型中具有相同的after_initialize,则用户记录也将在每个.find上初始化为零(包括您在Post模型中所做的.finds)。 -
您是否知道每次实例化记录时都会调用
after_initialize?这与new以及任何数据库检索有关。您可能想对 dms 列执行self.points = 0 if new_record?和同上...所以当您检索现有记录时不会发生这种情况。 -
啊,酷。让我把它放在一个答案中,这样你就可以接受了。
标签: ruby-on-rails ruby database activerecord models