Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 更新属性在保存回调后更新对象失败(mongomapper+;rails3)_Ruby On Rails_Ruby On Rails 3_Mongomapper - Fatal编程技术网

Ruby on rails 更新属性在保存回调后更新对象失败(mongomapper+;rails3)

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

在after_save回调中更新带有update_属性的模型实例时遇到问题。Update_attributes返回true,但未在模型实例中设置属性

模型对象Graph有许多数据点,我想跟踪最大值以及测量它的时间。出于各种原因,我想对该信息进行非规范化,因此我得到了以下代码:

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已更新

本例中使用的方法,即使有效,也会导致对象保存两次:一次是在最初保存时,另一次是在保存后的
中的
更新属性期间