Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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 轨道4:Can';t修改冻结哈希_Ruby On Rails_Ruby On Rails 4_Activerecord_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 轨道4:Can';t修改冻结哈希

Ruby on rails 轨道4:Can';t修改冻结哈希,ruby-on-rails,ruby-on-rails-4,activerecord,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 4,Activerecord,Ruby On Rails 5,订单型号: class Order < ActiveRecord::Base has_many :sales, dependent: :destroy, inverse_of: :order end 销毁订单时,关联的销售也应销毁,但在执行此操作时遇到错误: RuntimeError in OrdersController#destroy Can't modify frozen hash 此行高亮显示:self.price=mrr*self.quantity.to\u f 手动一步

订单
型号:

class Order < ActiveRecord::Base
  has_many :sales, dependent: :destroy, inverse_of: :order
end
销毁
订单
时,关联的
销售
也应销毁,但在执行此操作时遇到错误:

RuntimeError in OrdersController#destroy
Can't modify frozen hash
此行高亮显示:
self.price=mrr*self.quantity.to\u f

手动一步一步地销毁所有相关的
Sale
s记录不会出错。在不再关联任何
Sale
之后,我也可以销毁
订单
记录


有什么想法吗?

在突出显示的那一行,您应该确保在更新其
价格
属性时,
销售
不会被破坏:

self.price = mrr * quantity.to_f unless destroyed? # notice, no need for self before quantity
# or
write_attribute(:price, mrr * quantity.to_f) unless destroyed?

我也遇到过同样的问题,并在寻找答案。只发现关于销毁的讨论;但是,我已经确定,如果我创建一个新的活动记录(find_或create_by),然后创建依赖于第一个活动记录的第二个对象,我会得到相同的错误。我通过在创建/修改第二条活动记录之前保存第一条活动记录来解决此问题。我不明白为什么需要创建,尽管我可以理解为什么第二条记录希望第一条记录在保存/修改之前存在。

我将Rails从4.1升级到4.2.5,并在尝试使用标记保存对象时出错


在我的例子中,问题是由于gem'充当了“上的标记,应该升级到更新版本>=3.4

太好了!我正在寻找它来修复EAVHash宝石中的一个深缺陷。
self.price = mrr * quantity.to_f unless destroyed? # notice, no need for self before quantity
# or
write_attribute(:price, mrr * quantity.to_f) unless destroyed?