Ruby on rails 更新属性在保存回调后更新对象失败(mongomapper+;rails3)
在after_save回调中更新带有update_属性的模型实例时遇到问题。Update_attributes返回true,但未在模型实例中设置属性 模型对象Graph有许多数据点,我想跟踪最大值以及测量它的时间。出于各种原因,我想对该信息进行非规范化,因此我得到了以下代码:Ruby on rails 更新属性在保存回调后更新对象失败(mongomapper+;rails3),ruby-on-rails,ruby-on-rails-3,mongomapper,Ruby On Rails,Ruby On Rails 3,Mongomapper,在after_save回调中更新带有update_属性的模型实例时遇到问题。Update_attributes返回true,但未在模型实例中设置属性 模型对象Graph有许多数据点,我想跟踪最大值以及测量它的时间。出于各种原因,我想对该信息进行非规范化,因此我得到了以下代码: class Graph include MongoMapper::Document many :datapoints, :dependent=>:destroy key :max_value, Floa
class Graph
include MongoMapper::Document
many :datapoints, :dependent=>:destroy
key :max_value, Float
key :max_value_at, Time
end
在我的数据点中:
class Datapoint
belongs_to :graph
key :graph_id, ObjectId, :required=>true
key :value, Float
key :time, Time
after_save :update_max_on_save
....
def update_max_on_save
g = self.graph? ? self.graph : Graph.find_by_id(self.graph_id)
if g.max_value.nil? || g.max_value < self.value
g.update_attributes( {:max_value=>self.value, :max_value_at=>self.time} )
end
end
end
类数据点
属于:图形
key:graph_id,ObjectId,:required=>true
键:value,Float
关键:时间,时间
保存后:在保存时更新最大值
....
保存时def更新_max_
g=自相关图?self.graph:graph.find\u by\u id(self.graph\u id)
如果g.max|u值为0?|g、 最大值<自身值
g、 更新属性({:max\u value=>self.value,:max\u value\u at=>self.time})
结束
结束
结束
有谁能解释一下为什么这种更新图表属性的方法会失败?不确定,但我实际上会在保存之前将其更改为
,或者验证:max\u已更新
本例中使用的方法,即使有效,也会导致对象保存两次:一次是在最初保存时,另一次是在保存后的中的更新属性期间