尝试删除 Heroku 上的记录时,如何解决"RuntimeError: can't modify frozen Hash"?



在Heroku上的Rails控制台上,我试图进行一个简单的数组迭代,并在存在特定条件的情况下删除记录,但我遇到了这个错误。

这就是我正在做的:

irb(main):044:0> a.first
=> #<Activity id: 1, trackable_id: 3, trackable_type: "Node", owner_id: 5, owner_type: "User", key: "node.create", parameters: {}, recipient_id: nil, recipient_type: nil, created_at: "2014-07-30 11:22:15", updated_at: "2014-07-30 11:22:15", read_status: 0>
irb(main):045:0> a.first.trackable.nil?
=> false
irb(main):046:0> a.second.trackable.nil?
=> true
irb(main):061:0> a.each do |x|
irb(main):062:1* if x.trackable.nil?
irb(main):063:2> x.destroy
irb(main):064:2> x.save
irb(main):065:2> end
irb(main):066:1> end
RuntimeError: can't modify frozen Hash

思考我如何才能做到这一点?

如果我去掉x.save,它似乎并没有消除记录。

不能对已销毁的记录调用.save。一旦您对记录调用了.destroy,它就已经从数据库中删除了;根据它调用.save是没有用的。如果你根据Ruby的内存中是否还有访问权限来判断它是否被破坏,那么你可以根据一条记录调用.destroyed?来确定它是否被销毁。

相关内容

最新更新