Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 activeModel::脏记录即使没有更改也会更改_Ruby On Rails_Ruby_Activerecord_Activemodel_Active Model Serializers - Fatal编程技术网

Ruby on rails activeModel::脏记录即使没有更改也会更改

Ruby on rails activeModel::脏记录即使没有更改也会更改,ruby-on-rails,ruby,activerecord,activemodel,active-model-serializers,Ruby On Rails,Ruby,Activerecord,Activemodel,Active Model Serializers,我正在使用ActiveModel::Dirty库。我有以下代码: def tasks_changed? @changed = false self.tasks.each do |task| if task.previous_changes.any? @changed = true puts 'task changed so no update' puts 'this task changed' + task.inspect.to_s

我正在使用ActiveModel::Dirty库。我有以下代码:

def tasks_changed?
   @changed = false
   self.tasks.each do |task|
     if task.previous_changes.any?
       @changed = true
       puts 'task changed so no update'
       puts 'this task changed' + task.inspect.to_s
       puts 'here are the changes' + task.previous_changes.to_s
     end
   end
   return @changed
end
如果用户更改表单中的某些内容,此方法将更改控制器的行为。问题是其中一个字段是datetime,出于某种原因,previous_changes认为datetime每次都会更改,而不管是否更改

控制台甚至告诉我没有变化。下面是上面的puts语句在控制台中产生的结果:

task changed so no update
this task changed#<Task id: 19, title: "task 1", content: "task 2 content", created_at: "2014-03-11 17:33:26", updated_at: "2014-03-11 20:00:01", schedule_id: 1, amount: nil, time_frame: "2014-03-27 20:00:00", state: "incomplete", denied: 0, order_number: 0, finished_description: nil>
here are the changes{"time_frame"=>[Thu, 27 Mar 2014 16:00:00 EDT -04:00, Thu, 27 Mar 2014 16:00:00 EDT -04:00], "updated_at"=>[Tue, 11 Mar 2014 15:57:44 EDT -04:00, Tue, 11 Mar 2014 16:00:01 EDT -04:00]}
task changed so no update
this task changed#<Task id: 21, title: "task 2", content: "task 2 content", created_at: "2014-03-11 17:42:18", updated_at: "2014-03-11 20:00:01", schedule_id: 1, amount: nil, time_frame: "2014-03-29 20:00:00", state: "incomplete", denied: 0, order_number: 1, finished_description: nil>
here are the changes{"time_frame"=>[Sat, 29 Mar 2014 16:00:00 EDT -04:00, Sat, 29 Mar 2014 16:00:00 EDT -04:00], "updated_at"=>[Tue, 11 Mar 2014 15:57:44 EDT -04:00, Tue, 11 Mar 2014 16:00:01 EDT -04:00]}
task changed so no update
this task changed#<Task id: 22, title: "task 3 ", content: "change", created_at: "2014-03-11 18:43:23", updated_at: "2014-03-11 20:00:01", schedule_id: 1, amount: nil, time_frame: "2014-03-31 20:00:00", state: "incomplete", denied: 0, order_number: 2, finished_description: nil>
here are the changes{"time_frame"=>[Mon, 31 Mar 2014 16:00:00 EDT -04:00, Mon, 31 Mar 2014 16:00:00 EDT -04:00], "updated_at"=>[Tue, 11 Mar 2014 15:57:44 EDT -04:00, Tue, 11 Mar 2014 16:00:01 EDT -04:00]}
任务已更改,因此没有更新
这项任务改变了#
以下是更改{“时间框架”=>[Thu,2014年3月27日美国东部夏令时16:00:00-04:00,Thu,2014年3月27日美国东部夏令时16:00:00-04:00],“更新时间”=>[Tue,2014年3月11日美国东部夏令时15:57:44-04:00,Tue,2014年3月11日16:00:01美国东部夏令时-04:00]
任务已更改,因此没有更新
这项任务改变了#
以下是更改{“时间框架”=>[Sat,2014年3月29日,美国东部时间16:00:00-04:00,Sat,2014年3月29日,美国东部时间16:00:00-04:00],“更新时间”=>[Tue,2014年3月11日,美国东部时间15:57:44-04:00,Tue,2014年3月11日,美国东部时间16:00:01-04:00]]
任务已更改,因此没有更新
这项任务改变了#
以下是更改{“时间框架”=>[2014年3月31日星期一美国东部夏令时16:00:00-04:00,2014年3月31日星期一美国东部夏令时16:00:00-04:00],“更新时间”=>[2014年3月11日星期二15:57:44美国东部夏令时-04:00,2014年3月11日星期二16:00:01美国东部夏令时-04:00]]

我的基本问题是,为什么以前的更改会认为每次都有更改?我该如何修复它?

至少
时间范围和
更新时间发生了更改。请注意,时间对象的保存时间不只是秒,例如,
inspect
方法不显示毫秒


但是如果不提供这样做的代码,没有人能够告诉您为什么会发生这种情况。

您所说的这样做的代码是什么意思?我提供了所有与脏关联相关的代码?我指的是以前处理
任务的所有代码。检查更改,因此必须有可能更改它们的代码。可能存在对关联对象的回调,某些内容涉及属性,可能是规范化程序,或者您使用几乎相同的web表单值覆盖这些值。我不知道。。。