我有一个方法作为模型的一部分,它改变了一些属性并将它们提交到数据库。最初,我有
def accept
status = Offer.ACCEPTED
status_date = Time.now
puts valid? #true
save!
end
这实际上并没有起作用。当我在控制台中运行它时,我得到了
(0.1ms) BEGIN
(0.1ms) COMMIT
然而,当我改为update
电话时,一切都运行得很漂亮......
def accept
update({ status: Offer.ACCEPTED, status_date: Time.now })
end
我最近一直在调整验证,因此可能与它有关但我一直在关注.valid?
值并且它始终是真的。我在这里误解了什么?为什么没有保存数据?
答案 0 :(得分:2)
问题是你没有在编写器方法中使用self
。 Ruby需要编写器方法的显式接收器,否则它假定您尝试在代码中的某处分配变量。这种方法将解决您的问题:
def accept
self.status = Offer.ACCEPTED
self.status_date = Time.now
save!
end
我希望它有所帮助!