加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 这段代码如何抛出ActiveRecord :: ReadOnlyRec

发布时间:2020-12-17 03:59:24 所属栏目:百科 来源:网络整理
导读:我有一个购买模型,其中包含优惠券. Purchase模型包含以下代码: def decrement_coupon coupon = Coupon.find_by_code(coupon_code,:readonly = false) return unless coupon.respond_to?(:uses) coupon.uses = coupon.uses - 1 coupon.saveend 但是前几天我
我有一个购买模型,其中包含优惠券.

Purchase模型包含以下代码:

def decrement_coupon
  coupon = Coupon.find_by_code(coupon_code,:readonly => false)
  return unless coupon.respond_to?(:uses)
  coupon.uses = coupon.uses - 1
  coupon.save
end

但是前几天我收到了这个错误:

ActiveRecord::ReadOnlyRecord - ActiveRecord::ReadOnlyRecord:
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/persistence.rb:245:in `create_or_update'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/callbacks.rb:273:in `create_or_update'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activesupport-3.0.6/lib/active_support/callbacks.rb:419:in `_run_save_callbacks'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/callbacks.rb:273:in `create_or_update'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/persistence.rb:39:in `save'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/validations.rb:43:in `save'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/attribute_methods/dirty.rb:21:in `save'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/transactions.rb:240:in `save'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/transactions.rb:292:in `with_transaction_returning_status'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/transactions.rb:207:in `transaction'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/transactions.rb:290:in `with_transaction_returning_status'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/transactions.rb:240:in `save'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/transactions.rb:251:in `rollback_active_record_state!'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/transactions.rb:239:in `save'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/associations/association_proxy.rb:222:in `send'
 /usr/local/rvm/gems/ree-1.8.7-2010.02@lyconic/gems/activerecord-3.0.6/lib/active_record/associations/association_proxy.rb:222:in `method_missing'
 /var/www/88tactical_production/releases/20110823232510/app/models/purchase.rb:69:in `decrement_coupon'

是:readonly => false不保证非读取记录?将此功能移至优惠券模型会有所作为吗? (无论如何,我可能会这样做)

解决方法

这可能是由于您通过find_by_code()帮助程序加入其他子值.

当ActiveRecord使用连接查找返回其他值的对象时,它会将记录标记为只读.

这里有关于这个问题的详细描述:

What is causing this ActiveRecord::ReadOnlyRecord error?

如果是这种情况,您可以通过将您的:join连接到一个正确的:include来填充ActiveRecord实例而不将它们标记为只读来解决问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读