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?